Apache pig 清管器自定义项接收或使用错误的参数

Apache pig 清管器自定义项接收或使用错误的参数,apache-pig,cloudera,oozie,hue,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()); St

我在用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));
    ...
%DEFAULT firstModel_firstscript 'somedefaultstuffthatisntused/firstmodel.bin';
...
myUDF(document, '$firstModel_firstscript', '$secondmodel_firstscript', '$lastmodel_firstscript') AS score;
在Oozie调试中,ingoing参数似乎正常:

  -param
  firstModel_firstscript=./en-sent.bin
在脚本本身中,它如下所示:

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));
    ...
%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
请注意,我本不应该通过该目录

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


关于

我认为参数区分大小写。您传递了
firstModel\u firstscript
,但在pig脚本中使用了
firstModel\u firstscript
。 希望有帮助

此外,请尝试访问pig中的变量,如下所示:

${firstmodel\u firstscript}


我发现我用错误的方式在脚本中传递hadoop设置

使用:

set xyz firstmodel_firstscript;
而不是

set xyz $firstmodel_firstscript;

即使已经通过%default设置了值,这仍然是正确的方法。

文件位于HDFS还是本地文件系统中?并且您正在mapreduce模式下运行pig?是的,另一个脚本(在HDFS上也有一个简单的文本文件)确实正确运行。出于可读性原因,我更改了上述代码中的名称,在实际的脚本中,它们在所有方面都具有相同的名称。当您不传递参数并直接将文件传递给udf时,是否有效?换句话说,这是udf的问题还是传递参数的问题?`[main]ERROR org.apache.pig.tools.grunt.grunt-ERROR 1200:语法错误,在''.'处或附近出现意外符号'.''我认为。这是第一个。在./binfile.bintry“${firstmodel_firstscript}”(带引号)中,我刚才尝试了这个方法,但现在得到了一些不太有用的错误消息:
[main]ERROR org.apache.pig.tools.pigstats.SimplePostStats-ERROR 2997:无法从备份的错误中重新创建异常:attempId:trust\u 1406704111487\u 0008\u m\u000000\u 3信息:容器被应用程序管理员杀死。
EDIT:在更高的位置,我得到与以前相同的消息,即
[文件不存在:/user/cloudera/firstmodel\u firstscript