参数替换时的空白字符

时间:2013-04-26 05:30:24

标签: hadoop mapreduce apache-pig

我想使用参数替换

在我的猪脚本中传递过滤器语句

为此,我尝试了

    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

我在apache论坛中尝试了猪用户提出的flt='\'a1==1 AND a2=2\''flt="a1==1 AND a2==2"以及在SO中看过类似的帖子。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

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

exec -p p1=1 -p p2=2 filterscript.pig

在filterscript.pig脚本中,您可以在条件子句中使用这些参数值。例如

a1==$p1 AND a2=$p2

答案 1 :(得分:1)

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

pig -param flt="a1\=\=1 AND a2\=\=2" -f filterscript.pig

其中filterscript.pig是这样的:

A = load ...
...
B = filter A by $flt;
...

请注意,'='也会被转义,否则过滤条件将不会被评估为布尔值。

如果你想在exec中使用grunt shell 中的过滤器替换, 然后你会遇到空白问题。由于转义空格字符不起作用,因此您可以创建parameter file

作为解决方法
cat params.txt
flt="a1\=\=1 AND a2\=\=2"

然后发出:

exec -param_file params.txt filterscript.pig

注意:我使用Pig 0.12