我有以下问题。 我正在使用 API 连接到某个地方,并将数据作为输入流获取。 目标是在删除重复行后保存数据。 由第 10、15、22 列定义的重复项。
我正在使用多个线程获取数据。 目前我首先将数据保存到一个 csv 文件中,然后删除重复项。 我想在读取数据时执行此操作。 数据量约为1000万条记录。 我可以使用的内存有限。 该机器有 32gb 的内存,但我的内存有限,因为还有其他应用程序正在使用它。
我在这里阅读了有关使用 HashMap 的信息。 但我不确定我是否有足够的内存来使用它。
有没有人建议如何解决这个问题?
最佳答案
Hashmap 将至少使用与原始数据一样多的内存。因此,它可能不适合您的数据集大小(但是,您应该检查一下,因为如果可行,这是最简单的选择)。
我会做的是将数据写入文件或数据库,为要删除重复的字段计算哈希值,然后将哈希值存储在内存中并适当引用文件(例如,原始值在书面文件中)。引用当然应该越小越好。
当您命中哈希匹配时,查找原始值并检查它是否相同(因为不同值的哈希可能会落在一起)。
现在的问题是您期望有多少重复项。如果您期望很少匹配,我会选择一种写入成本低而读取成本高的解决方案,即将所有内容线性转储到一个平面文件中,然后从该文件中读回。
如果您期望有很多匹配项,则可能是相反的方式,即有一个索引文件或一组文件,甚至是一个数据库(确保它是一个写操作不太昂贵的数据库)。
关于java - 在大规模数据上删除 java 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717681/