【问题标题】:Sort large file in Java在Java中对大文件进行排序
【发布时间】:2018-02-14 17:06:42
【问题描述】:

如何根据键对包含大约 6 GB 大小的大约 1000 万条记录(JSON 记录)的非常大的文件进行排序。

解决方案应该是内存优化的。我的意思是,有一些方法可以将数据放入 Collection 并排序,但这会消耗大量堆大小,从而导致时间障碍。

请建议一些通用的内存优化排序技术,其中我们可以传递一个 JSON 文件和一些键值和排序类型,它会返回一个排序文件。

例如

文件输入.json

{
    "name":"rohit", "age":20, ....
}
{
    "name":"sourav", age":32, ....
}
.
.
.
//some 10 million records

所以,假设 key 是 age,它和 type 是 desc,它应该返回一个按年龄排序的 desc 文件。

【问题讨论】:

  • 听起来需要数据库... ;)
  • 到目前为止您尝试过什么?也许先尝试自己弄清楚,然后在遇到问题时再回来:)
  • 你可能很幸运能够将洞文件的解析数据保存在 RAM 中(4GB(最高 8GB)应该足够了)。
  • 查看 hadoop map reduce,它可能会有所帮助.. 有一些示例或查看此链接hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html

标签: java algorithm file optimization generic-programming


【解决方案1】:

您可以尝试合并排序,即存储较小的文件块

【讨论】:

  • 我曾尝试使用 TreeMap 加载数据,但这会导致内存问题
【解决方案2】:

你的要求不是那么简单。首先它是 6GB 的文件,第二个挑战是对其进行排序。您需要先将文件拆分为小文件。现在需要编写适当的算法或程序要求。读取每个文件并根据您的算法进行排序并写入文件。每个新创建的文件应该只有一个特定的排序信息。例如,如果键类型 green 将该排序信息写入 green.sort 文件,最后合并所有文件并使其成为一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-15
    • 2013-03-16
    • 2017-10-22
    • 2017-04-04
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多