java - Pig UDF 找不到 WritableComparable

标签 java maven hadoop apache-pig

尝试使用 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/

相关文章:

java - java.lang.Thread.State : WAITING (parking) 90%线程解析

java - 如何设置多语言文本到语音

java - 从 spring-boot :run 获取命令行参数

android - Gradle 尝试从错误的存储库下载

java - JUnit 测试 Hadoop 可写

java - 初始化一个 HashMap<Integer, List<Object>>

maven - 未调用 LoggingFilter - 给出 HTTP 404 - 未找到错误

python - 将python协同过滤代码转换为使用Map Reduce

hadoop - 无法启动名称节点。目录处于不一致状态 : storage directory does not exist or is not accessible

java - movzbl 如何与寄存器值 0xffffffffffffffff 交互?