哪些操作产生排序输出?

时间:2013-12-13 16:51:23

标签: apache-pig

如果参数按键排序,操作joingroup by可以快得多。

当输入被排序时,它们也自然地产生排序的输出。

问题是:pig是否保证输出已排序,或者我需要order by生成的group by ... using 'merge'别名吗?

1 个答案:

答案 0 :(得分:1)

除了ORDER BY声明后,Pig不保证订购。由于Pig位于Hadoop之上,因此它不直接控制输出的创建方式,包括其顺序。

在随机播放阶段,键被分区到每个reducer,然后按键在每个reducer上排序。结果是,如果依次检查每个reducer的输出(即,查看reducer 0的输出,然后是reducer 1等),你会发现它们是按map键排序的。如果是猪GROUP BY,则地图键是您要分组的字段。所以经常你会发现输出按照你想要的方式排序。

这就是Pig不能控制底层map-reduce shuffle和sort阶段。所以排序顺序可以在下面变化,Pig不需要担心它。我不知道在什么条件下排序有所不同 - 可能有不同版本的Hadoop - 但你不应该依赖它。一般来说,我发现排序是lexicographic,这意味着整数上的GROUP BY将不会按照您期望的方式排序。我还看到输出首先按长度排序,然后按字典顺序排列,这可能不是你想要的。

如果您发现它在您的发行版中对您有用,那么对您有更多的权力,您可以跳过这两个MR作业。但是,如果您更改了有关Hadoop安装的内容,则您的脚本可能无法移植,并且可能会受到破坏。