加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:34:22 所属栏目:Java 来源:网络整理
导读:给定不适合内存的大型数据集,是否有任何库或api在 Java中执行排序? 实现可能类似于linux实用程序排序. 解决方法 Java提供了一个通用的排序例程,可以作为更大的解决方案的一部分.对数据进行排序的一种常见方法是太大,无法全部适合内存,这是: 1)读取与主内存
给定不适合内存的大型数据集,是否有任何库或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参数,并通过使用临时文件来有效地排序文件.我敢打赌,你可以在这里找到至少几个实现,但如果不是,你可以按照上述方式滚动自己的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读