Java Pig UDF未找到可写的可比较项
当我试图用maven(或者用IDE IntelliJ)编译我的Pig UDF时,我遇到了以下错误: 所以我想我应该在POM文件中添加一个对hadoop核心的依赖项,但是仍然没有任何更改,尽管我检查了,并且WritableComparable类在jar中 我的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
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
应该解决这个异常。includehadoop-common-2.3.0.jar
应该解决这个异常。我没有使用maven编译UDF jar,我只使用ant,所以我没办法。但是你的上一个元组
技巧不会奏效。exec
函数在每条记录上运行,因此previousTuple
将始终为null
。但是,您可以将previousTuple
设为类成员,它可能会将其状态转移到下一条记录。但是,由于记录可以以不可预测的顺序处理,所以不清楚这是否有用。我没有使用maven编译UDF jar,我只使用ant,所以我无法帮助。但是你的上一个元组
技巧不会奏效。exec
函数在每条记录上运行,因此previousTuple
将始终为null
。但是,您可以将previousTuple
设为类成员,它可能会将其状态转移到下一条记录。由于记录可能会以不可预测的顺序被处理,所以不清楚这是否有用。谢谢,它帮助了我。谢谢,它帮助了我。