首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对非常大的文件进行排序

如何对非常大的文件进行排序
EN

Stack Overflow用户
提问于 2011-10-27 23:10:22
回答 10查看 51.9K关注 0票数 32

我有一些文件应该根据每行开头的id进行排序。文件大小约为2-3 gb。

我尝试将所有数据读取到一个ArrayList中并对它们进行排序。但是内存并不足以保存所有这些数据。它不起作用。

线条看起来像这样

0052304 0000004000000000000000000000000000000041 John Teddy 000023

0022024 0000004000000000000000000000000000000041 George Clan 00013

如何对文件进行排序??

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-10-27 23:15:13

这完全不是Java的问题。您需要研究一种有效的算法来对未完全读取到内存中的数据进行排序。对Merge-Sort进行一些调整就可以实现这一点。

看看这个:http://en.wikipedia.org/wiki/Merge_sort

和:http://en.wikipedia.org/wiki/External_sorting

基本上,这里的想法是将文件拆分成较小的片段,对它们进行排序(使用merge sort或其他方法),然后使用Merge from merge-sort创建新的排序文件。

票数 37
EN

Stack Overflow用户

发布于 2016-08-18 01:53:44

由于您的记录已经是平面文件文本格式,您可以将它们通过管道传输到UNIX sort(1),例如sort -n -t' ' -k1,1 < input > output。它将自动将数据分块,并使用可用内存和/tmp执行合并排序。如果需要的空间超过了可用内存,请在命令中添加-T /tmpdir

有趣的是,每个人都告诉您下载大型C#或Java库,或者自己实现merge-sort,因为您可以使用在每个平台上都可用并且已经存在了几十年的工具。

票数 23
EN

Stack Overflow用户

发布于 2011-10-27 23:15:13

你需要一个外部的合并排序来做到这一点。Here是它的一个Java实现,可以对非常大的文件进行排序。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7918060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档