Java 仅映射的UDF是否从代数或累积中受益?

Java 仅映射的UDF是否从代数或累积中受益?,java,hadoop,apache-pig,Java,Hadoop,Apache Pig,在Hadoop上的Pig中,我有一个Java UDF应用于大元组,它只获取大元组的4个字段,并且(经过一些非平凡的计算)返回两个新值,我将它们固定到大元组上 没有还原阶段 这能从代数或累积中获益吗 在没有任何分组的情况下,我看不出这将如何提高速度。似乎仅仅为了加速而分组是朝着错误的方向迈出的一大步。不,我认为您正在创建一个常规的EvalFunc。让它成为代数的或累积的是没有意义的 或者是其他未实现您提到的任何接口的EvalFunc的示例。代数的接口通过使用Hadoop的组合器工作,这就像是在真正

在Hadoop上的Pig中,我有一个Java UDF应用于大元组,它只获取大元组的4个字段,并且(经过一些非平凡的计算)返回两个新值,我将它们固定到大元组上

没有还原阶段

这能从代数或累积中获益吗


在没有任何分组的情况下,我看不出这将如何提高速度。似乎仅仅为了加速而分组是朝着错误的方向迈出的一大步。

不,我认为您正在创建一个常规的
EvalFunc
。让它成为代数的或累积的是没有意义的


或者是其他未实现您提到的任何接口的
EvalFunc
的示例。

代数的
接口通过使用Hadoop的组合器工作,这就像是在真正的还原阶段之前的一个迷你还原阶段。因此,如果您实际上没有进行任何缩减,那么这个接口是不相关的

另一方面,累加器不一定与减少阶段相关联。这只是一种在UDF中处理超大行李的方法。这类行李通常是分组的结果,但情况并非如此。清管器不会一次装入整个袋子,而是一次装入一块块袋子,并跟踪在最后产生最终结果所需的东西。我不知道它是否适合您的情况,但它可以用于仅地图的情况

但是,您提到您有一个非常大的元组。如果你真的是指元组而不是包,那么
累加器
就帮不了你

作为旁注,
累加器
的目的并不是为了加快计算速度(尽管这可能是由于垃圾收集而产生的结果,因为垃圾确实可以放入内存,但几乎没有)。它允许您处理由于内存限制而无法处理的行李。与之相比,
代数
,它实际上是一种加速机制,通过减少(ha!)在洗牌阶段发送到减缩器并写入磁盘的数据量