Linux 稳定排序一个大文件
我想在一列上对一个大文件进行排序。这类产品应该是稳定的。目前,我正在使用unix排序(带-s选项)。但是它非常慢。在hdfs中是否有众所周知的例程来执行此操作 我试过PIG's orderby,但不稳定。您可以使用Linux 稳定排序一个大文件,linux,sorting,hadoop,apache-pig,bigdata,Linux,Sorting,Hadoop,Apache Pig,Bigdata,我想在一列上对一个大文件进行排序。这类产品应该是稳定的。目前,我正在使用unix排序(带-s选项)。但是它非常慢。在hdfs中是否有众所周知的例程来执行此操作 我试过PIG's orderby,但不稳定。您可以使用 如果文件很大,所以比可用RAM大,你可以考虑对块进行排序并合并它们。 < P>我将文件分割成块(你可以在命令行上这样做,但是这取决于数据;你可能需要一个程序来完成)。数据块大小由您决定(几兆字节就可以了;确保unix排序对于一个数据块是快速的) 然后使用unix排序对每个数据块进行排
如果文件很大,所以比可用RAM大,你可以考虑对块进行排序并合并它们。
< P>我将文件分割成块(你可以在命令行上这样做,但是这取决于数据;你可能需要一个程序来完成)。数据块大小由您决定(几兆字节就可以了;确保unix排序对于一个数据块是快速的) 然后使用unix排序对每个数据块进行排序(sort-s-k..
)。如果你有多台机器,你可以并行完成
然后使用unix排序(sort-m-k…
)合并所有已排序的块。如果您以正确的顺序指定文件列表,这也应该是稳定的。如果不是(我没有测试它,也没有找到任何信息,但很可能它是稳定的),那么您可能需要编写自己的合并程序,这应该不会太复杂
如果有太多的块无法有效合并,可以将块1..10合并到块a,然后将块11..20合并到块b(同样可以在多台机器上并行执行),最后合并块a..z。但我怀疑这是否真的需要。文件有多大(GB、TB、PB)?显示其某些行(或行)。在it上运行sort-s
有多慢(小时、天?)?