gpt4 book ai didi

java - Pig UDF 在生成新元组时抛出 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:01 27 4
gpt4 key购买 nike

我有一个 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;

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

ERROR 0: Exception while executing [POUserFunc (Name: POUserFUnc(udf.MyUDF)[tuple] - scope-38 Operator Key: scope-38) children: 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 block ,然后抛出此 NullPointerException 错误。

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

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

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

最佳答案

相关代码尚未实例化您的元组实例,因此您无法在不存在的对象上调用该方法。

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

关于java - Pig UDF 在生成新元组时抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com