筛选和分类大量的键值对(java)

时间:2019-07-01 13:44:01

标签: java algorithm data-structures guava

我有很多键值对(TB数据),可以从某些文件中读取。

为简单起见,我们假设键和值都是整数。

最后,我感兴趣的是使每个键都具有遇到的最高N值,并将它们再次作为键值对写入一些不同的文件中。

只要给定键中的最小3个值,输出文件中包含给定键的N个条目以上就没有问题。

保持文件满足上述条件,但是我正在尝试减小大小,因为某些键在输入中包含很多值,这些值不重要。

将所有数据保留在内存中显然不是一种选择。

因此,我正在寻找某种缓存。我可以在其中保存所找到的每个键的排序列表,并且一旦达到特定的大小限制,就可以将缓存中一半的条目刷新到输出中。番石榴的LoadingCache似乎对我没有帮助,因为权重为computed at entry creation time, and are static thereafter.

我是否可以使用/实现特定的数据结构/算法,以帮助我解决问题?

1 个答案:

答案 0 :(得分:0)

简单方法:

  1. 对原始文件进行排序您的排序标准是升序为键,值是降序。 Linux sort实用程序可快速完成此任务。 (嗯,就像输入命令一样快。对TB级数据进行排序将需要一些时间。)
  2. 编写一个程序,依次浏览文件并保存前N个值。

大功告成。

如果数据分散在多个文件中,其中某个特定键的值可以存在于多个文件中,则您可以分别对每个文件进行排序,然后将多个文件合并在一起。同样,sort可以为您做到这一点。

我不能保证上面的代码比自定义解决方案的执行速度快,但是我很自信地说,它的执行速度比您设计,编码,调试,测试然后运行自定义解决方案的速度快。