Pig UDF接收或使用错误的参数

时间:2014-07-30 07:35:17

标签: apache-pig cloudera oozie hue

我正在通过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

请注意,它不是我应该传递的目录。

我在这里不知所措.... 希望我能够清楚地解释我的情况。

此致

2 个答案:

答案 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设置值,这仍然是这样做的方法。