问题描述
我编写了一个带有构造函数参数的 UDF.
I've written a UDF which takes a constructor parameter.
我已经成功初始化并在 grunt
中使用它作为
I've successfully initialized and used it in grunt
as
grunt> register mylib.jar
grunt> define Function com.company.pig.udf.MyFunction('param-value');
但我无法使用 Pig 参数对其进行初始化
But I can't initialize it using a Pig parameter as in
grunt> define Decrypt com.company.pig.udf.MyFunction($secret);
或
grunt> define Decrypt com.company.pig.udf.MyFunction('$secret');
我尝试使用 -param
和 -param_file
选项初始化 $secret
.
I tried to initialize $secret
using both -param
and -param_file
options.
是否完全支持 Pig 参数作为 UDF 构造函数参数?
Are Pig parameters supported as UDF constructor arguments at all?
我正在加载的函数用于解密一些数据,参数值包含特殊字符%$!"但没有引号.所以我不确定我是遇到了值扩展问题还是参数没有被扩展.
The function I'm loading is used to decrypt some data and the param-value contains special characters as "%$!" but no quotes. So I'm unsure whether I'm running into an value expansion issue or a parameter there is just not being expanded.
我在参数文件中设置不带引号的参数值:
I'm setting the parameter value without quotes in a param file:
secret = My$ecr%t!
推荐答案
绝对可以将参数值传递给 UDF.问题似乎出在 $
符号上.
It is definitely possible to pass parameter values to UDFs. The problem seems to be the $
sign.
这应该是正确的语法:
define Decrypt com.company.pig.udf.MyFunction('$secret');
在您的参数文件中输入:
In your parameter file put:
secret=My\$ecr%t!
-dryrun 选项对此很有帮助,它会创建一个名为 .pig.subsituted
的文件,而不是运行实际的脚本.
The -dryrun option can be helpful for this it will create a file called <nameofpigfile>.pig.subsituted
and not run the actual script.
pig -x local -dryrun -f mypigfile.pig -param_file myparameterfile
另外,你可能需要猪 >= 0.11
Also, you probably need pig >= 0.11
https://issues.apache.org/jira/browse/PIG-2931
这篇关于是否可以将参数的值传递给 UDF 构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!