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

Is it possible to pass the value of a parameter to an UDF constructor?

我写了一个带有构造函数参数的 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');

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

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

我正在加载的函数用于解密一些数据,参数值包含特殊字符,如“%$!”但没有报价。所以我不确定我是遇到了值扩展问题还是参数没有被扩展。

我在参数文件中设置不带引号的参数值:

secret = My$ecr%t!

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

这应该是正确的语法:

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

在你的参数文件中输入:

secret=My$ecr%t!

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

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

另外,你可能需要 pig >= 0.11

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