微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于Java的大型数据集的基于文件的合并排序

给定不适合内存的大型数据集,是否有任何库或api在 Java中执行排序?
实现可能类似于linux实用程序排序.

解决方法

Java提供了一个通用的排序例程,可以作为更大的解决方案的一部分.对数据进行排序的一种常见方法是太大,无法全部适合内存,这是:

1)读取与主内存相符的数据,假设它是1 Gb

2)1 Gb的Quicksort(这里是从Collections框架中使用Java内置排序的地方)

3)将排序1 Gb的磁盘写入“chunk-1”

4)重复步骤1-3,直到完成所有数据,将每个数据块保存在单独的文件中.因此,如果您的原始数据为9 Gb,那么现在将有9个批量的数据标记为“chunk-1”,通过“chunk-9”

5)您现在只需要一个最终的合并排序,将9个排序的块合并成一个完全排序的数据集.合并排序将对这些预先排序的块非常有效.它将基本上打开9个文件读取器(每个块一个),加上一个文件写入器(用于输出).然后比较每个读取文件中的第一个数据元素,并选择最小值,写入输出文件.读取器从该选择的值进入其下一个数据元素,并重复找到最小值的9路比较过程,再次将答案写入输出文件.该过程重复,直到从所有块文件读取所有数据.

6)一旦步骤5读完所有完成的数据,您的输出文件现在包含一个完全排序的数据集

使用这种方法,您可以轻松地编写一个通用的“megasort”实用程序,它使用一个文件名和maxMemory参数,并通过使用临时文件来有效地排序文件.我敢打赌,你可以在这里找到至少几个实现,但如果不是,你可以按照上述方式滚动自己的.

原文地址:https://www.jb51.cc/java/122077.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐