linux - 稳定排序一个巨大的文件

标签 linux sorting hadoop apache-pig bigdata

我想在一个列上对一个巨大的文件进行排序。排序应该是稳定的。目前,我正在使用 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/

相关文章:

python - 创建表并从字典中的列表中排序数据

hadoop - 如何增加 Tez 的容器物理内存?

java - 动态类加载器的 IllegalAccessError

CLI 与程序的纯 C/C++ 库?

linux - shell脚本将文件传输到服务器

c++ - 从文件读取到不同的类对象

linux - 混合hadoop集群

linux - clang 错过汇编程序错误?

c - 内存分配代码错误

python - pandas Series.value_counts 返回相等计数字符串的不一致顺序