我有一个文件(大小=〜1.9 GB),其中包含约2.2亿(〜2.2亿)字/字符串。他们有重复,每100个单词几乎有1个重复的单词。如何在单词超过2亿时使用Java删除重复的单词?
在我的第二个程序中,我想读取文件。我成功地通过使用BufferedReader的行读取文件。
我们删除重复,我们可以使用SET(和它的实现),但设置有问题,如描述以下3个不同的场景:
- 在默认的JVM,集最多可包含0.7- 80万字,然后是OutOfMemoryError。
- 使用512M JVM大小,Set可以包含高达5-6百万字,然后是OOM错误。
- 使用1024M JVM大小,Set最多可包含12-13万个字,然后出现OOM错误。这里有1000万条记录添加到Set之后,操作变得非常缓慢。例如,添加下一个约4000条记录,它花费了60秒。
我有限制,我无法进一步增加JVM的大小,我想从文件中删除重复的单词。
请让我知道,如果你有任何其他方式/方法从这样一个巨大的文件中使用Java删除重复的单词的任何想法。许多感谢:)
信息的添加问题:我的话基本上是字母数字,他们是我们的系统中唯一的ID。因此,他们不是简单的英语单词。
的解决方案,你可以使用一个数据库,甚至第二个文件来存储结果呢? –
我想你会迭代很长一段时间。 –
我会确保我有足够的内存来完成任务。您可以购买大约100美元的16 GB PC内存。这些日子并没有那么多花费。 –