Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 稳定排序一个大文件_Linux_Sorting_Hadoop_Apache Pig_Bigdata - Fatal编程技术网

Linux 稳定排序一个大文件

Linux 稳定排序一个大文件,linux,sorting,hadoop,apache-pig,bigdata,Linux,Sorting,Hadoop,Apache Pig,Bigdata,我想在一列上对一个大文件进行排序。这类产品应该是稳定的。目前,我正在使用unix排序(带-s选项)。但是它非常慢。在hdfs中是否有众所周知的例程来执行此操作 我试过PIG's orderby,但不稳定。您可以使用 如果文件很大,所以比可用RAM大,你可以考虑对块进行排序并合并它们。 < P>我将文件分割成块(你可以在命令行上这样做,但是这取决于数据;你可能需要一个程序来完成)。数据块大小由您决定(几兆字节就可以了;确保unix排序对于一个数据块是快速的) 然后使用unix排序对每个数据块进行排

我想在一列上对一个大文件进行排序。这类产品应该是稳定的。目前,我正在使用unix排序(带-s选项)。但是它非常慢。在hdfs中是否有众所周知的例程来执行此操作

我试过PIG's orderby,但不稳定。

您可以使用


如果文件很大,所以比可用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
有多慢(小时、天?)?