我想在一个列上对一个巨大的文件进行排序。排序应该是稳定的。目前,我正在使用 unix 排序(带有 -s 选项)。但它很慢。在 hdfs 中是否有众所周知的例程来执行此操作?
我试过 PIG 的 orderby,但它不稳定。
最佳答案
我会将文件分成多个 block (您可以在命令行上执行此操作,但这取决于数据;您可能需要一个程序来执行此操作)。 block 大小由您决定(几兆字节就可以;确保 unix 排序对一个 block 来说很快)。
然后使用 unix 排序 (sort -s -k...
) 对每个 block 进行排序。如果您有多台机器,您可以并行执行此操作。
然后使用 unix 排序 (sort -m -k...
) 合并所有排序的 block 。如果您以正确的顺序指定文件列表,这也应该是稳定的。如果不是(我没有测试,也没有找到任何信息,但很可能它是稳定的),那么您可能需要编写自己的合并程序,这应该不会很复杂。
如果您有太多 block 无法有效合并,您可以将 block 1..10 合并到 block a,然后将 block 11..20 合并到 block b(同样,您可以在多台机器上并行执行此操作),以及最后合并 block a..z。但我怀疑这是否真的需要。
关于linux - 稳定排序一个巨大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262958/