小编mic*_*ia4的帖子

通过Java中的键聚合文件中的键值行

我有一个巨大的文件,由~800M行(60g)组成.行可以是重复的,由id和值组成.例如:

id1   valueA
id1   valueB 
id2   valueA 
id3   valueC
id3   valueA
id3   valueC
Run Code Online (Sandbox Code Playgroud)

注意:ids不按示例中的顺序(和分组).

我希望按键聚合行,这样:

id1   valueA,valueB
id2   valueA
id3   valueC,valueA
Run Code Online (Sandbox Code Playgroud)

有5000个可能的值.

该文件不适合内存,因此我无法使用简单的Java集合.此外,行的最大部分是单个(例如id2),它们应该直接写在输出文件中.

出于这个原因,我的第一个解决方案是迭代两次文件:

  • 在第一次迭代中,我存储了两个结构,只有id和没有值:
    • 单值ids(S1)
    • 多个值ids(S2)
  • 在第二次迭代中,在从内存中丢弃单值id(S1)之后,我可以直接将单值id-value对写入输出文件,检查它们是否不在多个值id中(S2)

问题是我无法完成第一次迭代导致内存限制.

我知道可以通过多种方式解决问题(键值存储,映射缩减,外部排序).

我的问题是什么方法可以更适应使用和快速实施?它只是一次进程,我更喜欢使用Java方法(而不是外部排序).

java memory hashmap key-value guava

6
推荐指数
1
解决办法
556
查看次数

标签 统计

guava ×1

hashmap ×1

java ×1

key-value ×1

memory ×1