我正在通过Oozie运行一个猪脚本。 该脚本使用UDF。
UDF得到如下参数:
public Float exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return new Float(0);
FileSystem fs = FileSystem.get(UDFContext.getUDFContext().getJobConf());
String firstModel = input.get(1).toString();
InputStream firstModel = fs.open(new Path(firstModel));
...
在Oozie调试中,ingoing参数似乎没问题:
-param
firstModel_firstscript=./en-sent.bin
脚本本身的看起来像这样:
%DEFAULT firstModel_firstscript 'somedefaultstuffthatisntused/firstmodel.bin';
...
myUDF(document, '$firstModel_firstscript', '$secondmodel_firstscript', '$lastmodel_firstscript') AS score;
结果相同
myUDF(document, '${firstModel_firstscript}', '${secondmodel_firstscript}', '${lastmodel_firstscript}') AS score;
STDERR中的是:
ERROR 2078: Caught error from UDF: my.domain.udf.myUDF [File does not exist: /user/cloudera/firstmodel_firstscript
请注意,它不是我应该传递的目录。
我在这里不知所措.... 希望我能够清楚地解释我的情况。
此致
答案 0 :(得分:0)
我认为参数区分大小写。您传递firstModel_firstscript
,但在pig脚本中使用firstmodel_firstscript
。
希望有所帮助。
另外,请尝试按如下方式访问pig中的变量:
${firstmodel_firstscript}
https://oozie.apache.org/docs/3.2.0-incubating/WorkflowFunctionalSpec.html#a3.2.3_Pig_Action
答案 1 :(得分:0)
我发现我在脚本中以错误的方式传递hadoop设置。
使用:
set xyz firstmodel_firstscript;
而不是
set xyz $firstmodel_firstscript;
即使很难通过%default设置值,这仍然是这样做的方法。