Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pig UDF未找到可写的可比较项_Java_Maven_Hadoop_Apache Pig - Fatal编程技术网

Java Pig UDF未找到可写的可比较项

Java Pig UDF未找到可写的可比较项,java,maven,hadoop,apache-pig,Java,Maven,Hadoop,Apache Pig,当我试图用maven(或者用IDE IntelliJ)编译我的Pig UDF时,我遇到了以下错误: 所以我想我应该在POM文件中添加一个对hadoop核心的依赖项,但是仍然没有任何更改,尽管我检查了,并且WritableComparable类在jar中 我的UDF类如下所示: public class INCREMENTAL_UPDATE extends EvalFunc<DataBag> { TupleFactory tupleFactory = TupleFactory

当我试图用maven(或者用IDE IntelliJ)编译我的Pig UDF时,我遇到了以下错误:

所以我想我应该在POM文件中添加一个对hadoop核心的依赖项,但是仍然没有任何更改,尽管我检查了,并且WritableComparable类在jar中

我的UDF类如下所示:

public class INCREMENTAL_UPDATE extends EvalFunc<DataBag> {

    TupleFactory tupleFactory = TupleFactory.getInstance();
    BagFactory bagFactory = BagFactory.getInstance();


    public DataBag exec(Tuple input) throws IOException {
        if (null == input || input.size() != 0) {
            return null;
        }

        try {
            DataBag inputbag = (DataBag) input.get(0);
            Iterator it = inputbag.iterator();

            DataBag outputbag = bagFactory.newDefaultBag();

            Tuple previousTuple = null;
            while (it.hasNext()) {
                Tuple currentTuple = (Tuple) it.next();
                Tuple outputTuple = tupleFactory.newTuple();

                for (int i = 0; i < currentTuple.size(); i++) {
                    Object currentvalue = currentTuple.get(i);
                    if (currentvalue == null) {
                        outputTuple.append(currentvalue);
                    } else {
                        outputTuple.append(previousTuple.get(i));
                    }
                }

                previousTuple = outputTuple;
                outputbag.add(outputTuple);
           }
            return outputbag;
        } catch (Exception e) {
           throw new IOException("UDF INCREMENTAL_UPDATE failed");
        }
    }
}
公共类增量更新扩展了EvalFunc{
TupleFactory TupleFactory=TupleFactory.getInstance();
BagFactory BagFactory=BagFactory.getInstance();
公共数据包exec(元组输入)引发IOException{
if(null==input | | input.size()!=0){
返回null;
}
试一试{
DataBag inputbag=(DataBag)input.get(0);
迭代器it=inputbag.Iterator();
DataBag outputbag=bagFactory.newDefaultBag();
Tuple-previousTuple=null;
while(it.hasNext()){
Tuple currentTuple=(Tuple)it.next();
Tuple outputTuple=tupleFactory.newTuple();
对于(int i=0;i

我还没有弄清楚这是否真的有效,因为我不确定是否分发了UDF。如果是的话,以前的元组可能不会工作。但是我甚至无法测试它,因为我无法编译,因为上面的错误。

我也收到了这个错误,并且最终能够通过包含Hadoop类路径和pig.jar文件来编译

javac -cp pig-0.11.0.jar:\`hadoop classpath\`  UPPER.java
如果这不起作用,请尝试不使用斜杠:

javac -cp pig-0.11.0.jar:`hadoop classpath`  UPPER.java

我也收到了这个错误,最终能够通过包含Hadoop类路径和pig.jar文件进行编译

javac -cp pig-0.11.0.jar:\`hadoop classpath\`  UPPER.java
如果这不起作用,请尝试不使用斜杠:

javac -cp pig-0.11.0.jar:`hadoop classpath`  UPPER.java

include
hadoop-common-2.3.0.jar
应该解决这个异常。

include
hadoop-common-2.3.0.jar
应该解决这个异常。

我没有使用maven编译UDF jar,我只使用ant,所以我没办法。但是你的
上一个元组
技巧不会奏效。
exec
函数在每条记录上运行,因此
previousTuple
将始终为
null
。但是,您可以将
previousTuple
设为类成员,它可能会将其状态转移到下一条记录。但是,由于记录可以以不可预测的顺序处理,所以不清楚这是否有用。我没有使用maven编译UDF jar,我只使用ant,所以我无法帮助。但是你的
上一个元组
技巧不会奏效。
exec
函数在每条记录上运行,因此
previousTuple
将始终为
null
。但是,您可以将
previousTuple
设为类成员,它可能会将其状态转移到下一条记录。由于记录可能会以不可预测的顺序被处理,所以不清楚这是否有用。谢谢,它帮助了我。谢谢,它帮助了我。