是否可以将参数的值传递给UDF构造函数?

时间:2015-01-06 16:48:31

标签: apache-pig

我编写了一个带有构造函数参数的UDF。

我已成功初始化并在grunt中将其用作

grunt> register mylib.jar
grunt> define Function com.company.pig.udf.MyFunction('param-value');

但我无法使用Pig参数对其进行初始化,如

grunt> define Decrypt com.company.pig.udf.MyFunction($secret);

grunt> define Decrypt com.company.pig.udf.MyFunction('$secret');

我尝试使用$secret-param选项初始化-param_file

是否支持 Pig参数作为UDF构造函数参数?

我加载的函数用于解密某些数据,而param-value包含特殊字符"%$!"但没有引号。因此,我不确定我是否遇到了价值扩张问题,或者是否存在未扩展的参数。

我在参数文件中设置了没有引号的参数值:

secret = My$ecr%t!

1 个答案:

答案 0 :(得分:1)

绝对可以将参数值传递给UDF。问题似乎是$符号。

这应该是正确的语法:

define Decrypt com.company.pig.udf.MyFunction('$secret');

在参数文件中放置:

secret=My\$ecr%t!

-dryrun选项对此有用,它将创建一个名为<nameofpigfile>.pig.subsituted的文件,而不是运行实际的脚本。

pig -x local -dryrun -f mypigfile.pig -param_file myparameterfile

另外,您可能需要猪&gt; = 0.11

https://issues.apache.org/jira/browse/PIG-2931