我不知道为什么DISTINCT比Pig中的GROUP BY / FOREACH快,它们在MapReduce Framework中应该相同,但请参考:
http://pig.apache.org/docs/r0.10.0/perf.html#distinct
Pig wiki说“要从关系中的列中提取唯一值,您可以使用DISTINCT或GROUP BY / GENERATE.DISTINCT是首选方法;它更快,更有效。”
为什么呢?是以不同方式实施的吗?
答案 0 :(得分:3)
distinct的输出是一个只包含您不同的列的关系,因此Map作业仅输出指定列的值作为键和组合器最小化地图溢出输出,从而进一步减少Reducer的输入。 Group By的输出是一个“组”键元组和一个Bag,它包含与原始关系的所有列具有相同组键的所有元组,因此不使用组合器,并且Map阶段的输出更大并且减速器有更多的投入。猪可以做一些优化,但他们没有保证。