尝试使用 Maven(或使用我的 IDE IntelliJ)编译我的 Pig UDF 时出现以下错误:
cannot access org.apache.hadoop.io.WritableComparable
class file for org.apache.hadoop.io.WritableComparable not found
所以我想我应该将对 hadoop-core 的依赖项添加到我的 POM 文件中,但仍然没有任何变化,尽管我检查过并且 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");
}
}
}
我还没有弄清楚这是否真的有效,因为我不确定是否分发了 UDF。如果是,那么 previousTuple 可能无法工作。但我什至无法测试它,因为由于上述错误我无法编译。
最佳答案
我也收到了这个错误,最终能够通过将 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
关于java - Pig UDF 找不到 WritableComparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313014/