稳定排序一个巨大的文件

时间:2013-10-09 04:10:18

标签: linux sorting hadoop apache-pig bigdata

我想在列上排序一个巨大的文件。排序应该是稳定的。目前,我正在使用unix排序(使用-s选项)。但它很慢。在hdfs中有没有众所周知的例程?

我尝试过PIG的命令,但这不稳定。

2 个答案:

答案 0 :(得分:1)

我会将文件拆分成块(您可以在命令行上执行此操作,但这取决于数据;您可能需要一个程序来执行此操作)。块大小取决于你(几兆字节是好的;确保unix排序快一个块)。

然后使用unix排序(sort -s -k...)对每个块进行排序。如果您有多台计算机,则可以并行执行此操作。

然后使用unix排序(sort -m -k...)合并所有排序的块。如果您按正确的顺序指定文件列表,这也应该是稳定的。如果不是(我没有测试并且没有找到任何信息,但很可能它是稳定的),那么你可能需要编写自己的合并程序,这应该不是很复杂。

如果你有太多的块来有效地合并,你可以将块1..10合并到块a,然后将块11..20合并到块b(再次你可以在多台机器上并行执行),并且最后合并大块a..z。但我怀疑这是真的需要。

答案 1 :(得分:0)

您可以使用C++11

编写一些std::stable_sort程序

如果文件太大而且大于可用RAM,您可以考虑对块进行排序并合并它们。