我已经编写了一个接受构造函数参数的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值包含特殊字符,如“%$!”但没有引用。所以我不确定我是遇到了一个值扩展问题还是一个参数没有被扩展。
我正在参数文件中设置不带引号的参数值:
secret = My$ecr%t!
1条答案
按热度按时间c90pui9n1#
将参数值传递给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
另外,可能需要pig>=0.11https://issues.apache.org/jira/browse/pig-2931