大家

我实现了自定义的聚合 pig UDF。
UDF实现了代数接口(interface),共有3个类-Initial,Intermed和Final,可以在不同阶段进行工作。
它可以正常运行,但是效率低下。

UDF使用的算法有点繁重-尤其是在单个值上运行时。当运行较大的数据组(例如一次100个)时,它将更有效地工作。
我观察到的是,Initial类始终使用单个值调用,然后与Intermed和Final类结合使用。

我知道在这种情况下有一个Accumulator接口(interface),但是我找不到有关如何与代数UDF一起使用的文档。

所以我的问题是-有没有办法让我“强制”清管器将更多的值传递给“初始”计算-使用“累加器”界面还是通过其他方式。

说明或指向文档或样本的指针将不胜感激。

谢谢
阿米尔

最佳答案

似乎Pig的代数初始函数将始终在其元组中接收单个值(至少根据this blog post而言)。

为了解决我的问题,我最终要做的就是只返回Initial中的单个值,而根本不进行任何处理。 Intermed和Final函数将执行该算法。

由于Intermed函数可以从Initial函数或另一个Intermed函数接收输出(根据文档,这在实践中没有看到,在我的测试中,Intermed始终从Initial函数接收值),无论是Initial函数还是中间函数现在返回两个值的元组。元组中的第一个值是一个字符串,告诉我该值的来源-“初始”或“中间”。元组中的第二个值是实际结果。

关于hadoop - 实现自定义的Apache Pig代数UDF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24477385/

10-13 07:35