1

我不知道为什么 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快,它们在 MapReduce 框架中应该是相同的,但请参阅:

http://pig.apache.org/docs/r0.10.0/perf.html#distinct

Pig wiki 说:“要从关系中的列中提取唯一值,您可以使用 DISTINCT 或 GROUP BY/GENERATE。DISTINCT 是首选方法;它更快、更有效。”

为什么?实施方式是否不同?

4

1 回答 1

3

distinct 的输出是一个关系,它只包含你做不同的列,因此 Map 作业只输出指定列的值作为键,并且组合器最小化映射溢出输出,进一步减少 Reducer 的输入。Group By 的输出是一个“组”键元组和一个 Bag,其中包含与原始关系的所有列具有相同组键的所有元组,因此不使用组合器,并且 Map 阶段的输出更大,并且减速器有更多的输入。Pig 可以做一些优化,但不能保证。

于 2013-01-16T10:19:43.757 回答