【问题标题】:Pig UDF Throwing NullPointerException When Generating New TuplePig UDF 在生成新元组时抛出 NullPointerException
【发布时间】:2017-03-14 05:10:06
【问题描述】:

我有一个 Pig UDF,它会提取一些数据,然后尝试以最小的方式转换这些数据。

my_data = LOAD 'path/to/data' USING SomeCustomLoader();
my_other_data = FOREACH my_data GENERATE MyUDF(COL_1, COL_2, $param1, $param2) as output;
my_final_data = FOREACH my_other_data GENERATE output.NEW_COL1, output.NEW_COL2, output.NEW_COL3;

但是,我不断收到以下错误:

错误 0: 执行 [POUserFunc (Name: POUserFunc(udf.MyUDF)[tuple] - scope-38 Operator Key: scope-38) 时出现异常子项: null at []]: java.lang.NullPointerException

我的 UDF 获取数据并对其进行转换:

public class MyUDF extends EvalFunc<Tuple> {
    public Tuple exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;

        TupleFactory _factory;

        Long fieldOne;
        String fieldTwo;
        String fieldThree;

        _factory.getInstance();

        try {
            fieldOne = Long.valueOf(input.get(0).toString());
            fieldTwo = input.get(1).toString();
            fieldThree = input.get(2).toString();

            fieldOne = doSomething(fieldOne);
            fieldTwo = doSomething(fieldTwo);
            fieldThree = doSomething(fieldThree);

            return _factory.newTuple(Arrays.asList(fieldOne, fieldTwo, fieldThree));

        } catch (Exception ex) {
            return _factory.newTuple(Arrays.asList("ParseException", "", "", ""));
        }
    }
}

在调用元组工厂之前,我已调试并确认 fieldOne、fieldTwo 和 fieldThree确实存在。也很明显,抛出异常是因为代码到达catch 块,然后抛出这个NullPointerException 错误。

目前尚不清楚为什么会发生这种情况。

根据 Pig 文档(Pig 0.14.0 API),我应该能够使用相关项目调用 newTuple(java.util.List c)

我还定义了自己的 Schema,以确保返回 pig 脚本时类型正确。

【问题讨论】:

    标签: java nullpointerexception apache-pig udf pig-udf


    【解决方案1】:

    有问题的代码没有实例化你的元组实例,因此你不能在不存在的对象上调用方法。

    public class ... {
        TupleFactory _factory;
        public Tuple exec(Tuple input) {
            _factory = TupleFactory.getInstance();
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2014-03-25
      • 2016-10-05
      • 2021-07-09
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多