有啥好的 Pig Accumulator 接口实现的例子吗?

Posted

技术标签:

【中文标题】有啥好的 Pig Accumulator 接口实现的例子吗?【英文标题】:Any good examples of Pig Accumulator Interface implementation that works?有什么好的 Pig Accumulator 接口实现的例子吗? 【发布时间】:2013-02-17 17:46:06 【问题描述】:

我需要从 HDFS 读取数百万条记录,丰富它们并将它们作为 XML 文件存储在每个 XML 文件 10K 条记录的批次中。

我一直在试验 Accumulator 接口,并将我的 pig.accumulative.batchsize 设置为 2 进行测试。

但是,被调用的方法是“exec()”而不是 Accumulator 的“accumulate”方法。

我的UDF类大纲如下:

public class MyAccUDF extends EvalFunc <Tuple> implements Accumulator <Tuple>

    public Tuple exec(Tuple input) throws IOException 
        //..
    

    public void accumulate(Tuple b) throws IOException 
        //...
    

    public void cleanup() 
        //..
    

    public Tuple getValue() 
        //..
    

【问题讨论】:

【参考方案1】:

累加器接口不保证每次都被执行。本书编程猪outlines where the accumulator interface won't be honoured:

只要有可能,Pig 将选择使用 UDF 的代数实现而不是 蓄能器。这是因为累加器有助于避免将记录溢出到磁盘, 但它不会降低网络成本或帮助平衡减速器。如果一个中的所有 UDF foreach 实现 Accumulator 和至少一个不实现 Algebraic,Pig 会 使用蓄能器。如果至少有一个不使用累加器,Pig 将不会使用 累加器。这是因为 Pig 已经将整个包读入内存才能通过 到不实现累加器的UDF,所以不再有任何值 在累加器中。

您的 UDF 必须在 exec()accumulate() 中实现其逻辑。在the COUNT UDF 中可以找到这种重复功能的简单示例。

【讨论】:

以上是关于有啥好的 Pig Accumulator 接口实现的例子吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL*PLUS for Oracle 有啥好的替代品吗?

类助手有啥好的用途?

JQOM 有啥好的参考吗?

appium 关于游戏自动化有啥好的方法去实现么

在 iOS 应用程序之间同步数据有啥好的解决方案? [关闭]

有啥好的算法可以在加权图中找到如下定义的“最佳”路径?