Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 参数替换情况下的空白字符_Hadoop_Mapreduce_Apache Pig - Fatal编程技术网

Hadoop 参数替换情况下的空白字符

Hadoop 参数替换情况下的空白字符,hadoop,mapreduce,apache-pig,Hadoop,Mapreduce,Apache Pig,我想使用参数替换在我的pig脚本中传递一个带有的filter语句 为此我已经试过了 exec -param flt='a1==1 AND a2=2' filterscript.pig 但不幸的是,它抛出了一条异常消息 ERROR org.apache.pig.tools.grunt.Grunt - ERROR 101: Local file 'AND' does not exist. 清管器版本-0.9.2 我尝试过pig用户在apache论坛上建议的flt='\'a1==1

我想使用参数替换在我的pig脚本中传递一个带有的filter语句

为此我已经试过了

    exec -param flt='a1==1 AND a2=2' filterscript.pig
但不幸的是,它抛出了一条异常消息

    ERROR org.apache.pig.tools.grunt.Grunt - ERROR 101: Local file 'AND' does not exist.
清管器版本-0.9.2

我尝试过pig用户在apache论坛上建议的
flt='\'a1==1和a2=2\'
flt=“a1==1和a2==2”
,也在SO中看到了类似的帖子


任何帮助都将不胜感激

我认为您正在使用传递的参数作为条件。如果是这样,您将得到这样的错误。相反,您可以将它们作为单独的paarmeters传递,并在pig脚本中形成条件字符串

exec -p p1=1 -p p2=2 filterscript.pig
在filterscript.pig脚本中,可以在条件子句中使用这些参数值。比如说

a1==$p1 AND a2=$p2

如果在grunt shell之外运行脚本,则可以执行以下操作:

pig -param flt="a1\=\=1 AND a2\=\=2" -f filterscript.pig
其中,
filterscript.pig
如下所示:

A = load ...
...
B = filter A by $flt;
...
请注意,
'='
也被转义,否则筛选条件的值将不会计算为布尔值。

如果您想在grunt shell中使用过滤器替换,就像您尝试使用exec一样, 然后您将遇到空白问题。由于转义空白字符不起作用,作为一种解决方法,您可以创建:

然后发布:

exec -param_file params.txt filterscript.pig

注意:我使用Pig 0.12

谢谢您的回复。是的,这样我就知道了。看到了一些有趣的东西,这就是为什么要这样做。针对这类问题提出了许多JIRA问题,所有问题均已解决。据他们说,他们支持这种解释方式。谢谢。那很有趣。所以我认为应该使用-param“flt='a1==1和a2=2'”。对你有用吗?谢谢你的回复。我在grunt shell外部尝试过它,它显示了
ERROR 2999:意外的内部错误。在命令行中遇到意外参数-请检查命令行
。我已经在调试模式下运行了它,替换文件的输出
f=filter p by a1
,这意味着它可以替换到a1如果我只是通过
flt=“a1\=\=1”
,那么被替换的文件看起来像
f=filter p by a1==1
你能发布你执行的命令吗?我刚刚也检查了0.9.2版,它可以工作。
dse pig-r-p flt=“a1\=\=1和a2\=\=2”filterscript.pig
它可以与0.9.2一起工作。我也看到了这一点,但无法找出我的问题所在
exec -param_file params.txt filterscript.pig