为啥 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快

Posted

技术标签:

【中文标题】为啥 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快【英文标题】:Why DISTINCT is faster than GROUP BY/FOREACH in Pig为什么 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快 【发布时间】:2013-01-16 08:08:49 【问题描述】:

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

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

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

为什么?有不同的实现方式吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于为啥 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快的主要内容,如果未能解决你的问题,请参考以下文章

为啥 === 在 JavaScript 中比 == 快? [关闭]

为啥 ''.join() 在 Python 中比 += 快?

为啥将 JSON 对象存储在 cookie 中比字符串更安全或更好?

为啥 x*=y 在 Python 中比 x=x*y 慢?

为啥相同的代码在我的 BackGroundWorker 线程中比在我的 GUI 线程中慢得多?

为啥select count(_) from t,在InnoDB引擎中比MyISAM 慢