我使用Java编写了一个Accumulator UDF。当我在未排序的数据上运行UDF时,Pig(0.13.0)根据需要调用accumulate
方法:
output = FOREACH (GROUP input BY f) {
GENERATE MyUDF(input);
}
我可以告诉它它正在工作,因为日志声明reducer在累积模式下运行。
但是,当我应用辅助排序时,Pig会调用exec
方法。
output = FOREACH (GROUP input BY f) {
sorted = ORDER input BY f2;
GENERATE MyUDF(sorted);
}
我担心的是exec
方法同时将整个包放入内存中。我的输入太大,无法工作。这就是我实施Accumulator
界面的原因。
有谁知道为什么第二个例子没有正确使用accumulate
方法?关于如何排除故障的任何想法?