实现自定义Apache猪代数UDF

时间:2014-06-29 15:11:49

标签: hadoop apache-pig

每个人

我实现了一个自定义聚合猪UDF。 UDF实现了代数接口,有3个类 - Initial,Intermed和Final在不同的阶段工作。 它工作正常,但效率低下。

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

我知道有这种情况的Accumulator接口,但我找不到有关如何将它与代数UDF一起使用的文档。

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

非常感谢解释文档或样本的解释或指针。

由于 阿米尔

1 个答案:

答案 0 :(得分:1)

看来Pig的代数初始函数总是在其元组中接收一个值(至少根据this blog post)。

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

由于Intermed功能可以接收来自Initial函数或其他Intermed函数的输出(这是根据文档,实际上没有看到它,在我的测试中,Intermed总是从Initial函数接收到的值),我的初始和中间函数现在返回两个值的元组。元组中的第一个值是一个字符串,告诉我值的来源 - " Initial"或者" Intermed"。元组中的第二个值是实际结果。