我有一个巨大的文件,由~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),它们应该直接写在输出文件中.
出于这个原因,我的第一个解决方案是迭代两次文件:
问题是我无法完成第一次迭代导致内存限制.
我知道可以通过多种方式解决问题(键值存储,映射缩减,外部排序).
我的问题是什么方法可以更适应使用和快速实施?它只是一次进程,我更喜欢使用Java方法(而不是外部排序).