stable对一个大文件进行排序

bqjvbblv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(424)

我想把一个大文件排序在一列上。种类应该是稳定的。目前,我使用的是unix排序(带-s选项)。但是速度很慢。在hdfs中是否有众所周知的例程来执行此操作?
我试过Pig排,但不稳定。

htzpubme

htzpubme1#

您可以使用std::stable\u sort编写一些c++11程序
如果文件很大,因此比可用的ram大,您可以考虑对块进行排序并合并它们。

rpppsulh

rpppsulh2#

我会将文件分成块(您可以在命令行上这样做,但这取决于数据;你可能需要一个程序来完成)。块大小由您决定(几兆字节就可以了;确保unix排序对于一个块是快速的)。
然后使用unix排序对每个块进行排序( sort -s -k... ). 如果你有多台机器,你可以并行进行。
然后使用unix sort合并所有已排序的块( sort -m -k... ). 如果您以正确的顺序指定文件列表,这也应该是稳定的。如果不是(我没有测试,也没有找到任何信息,但很可能是稳定的),那么您可能需要编写自己的合并程序,这应该不是很复杂。
如果有太多的块要有效地合并,可以将块1..10合并到块a,然后将块11..20合并到块b(同样可以在多台机器上并行执行),最后合并块a..z。但我怀疑这是否真的需要。

相关问题