Java比较和更新大文件

时间:2017-10-28 16:12:50

标签: java performance file file-io

这是我的问题陈述。我有3个大文本文件(每个<5GB),每个文件有1亿行(记录)。我想比较文件1和2并更新文件3中的值。每个文件中的单个记录如下所示:

档案1

PrimaryValue1 | OldValue1

文件2

PrimaryValue1 | NewValue1

档案3

Field1Value | Field2Value | Field3Value | OldValue1 | Field5Value .... | Field100Value

我对每条记录的所有内容都是 OldValue1 ,这对每条记录都是唯一的。现在,使用&#39; PrimaryValue1 &#39;,我需要使用文件1&amp; 2获取与 OldValue1 对应的 NewValue1 ,然后在file3中更新 NewValue1 以代替 OldValue1 。 OldValue和NewValue对于每条记录都是唯一的。

据我所知,如果我将所有文件都读入内存,那么我将能够比较和替换这些值。由于这可能是内存密集型的,我想知道是否有更好的方法来处理这种情况。

1 个答案:

答案 0 :(得分:0)

File1和File2定义您必须应用于File3的替换。

我执行以下步骤:

  • 将File2读入HashMap newValues
  • 读取File1,并为每个条目:
    • newValues
    • 中查找主要值
    • 如果找到,请将旧值/新值对放入HashMap replacement
    • newValues删除条目(我猜,没有重复项)。
  • 读取File3,并为每个条目:
    • replacement地图。
    • 进行替换
    • 将结果行写入输出。

您需要内存用于替换,但主文件可以按顺序处理,只需要一个记录缓冲区。

如果出现OutOfMemoryError,在开始处理主File3之前,可能会在构建替换Map时发生这种情况。然后,您可以修改程序以处理File2的可管理块。算法的其余部分无需更改。