我有一個文件(大小=〜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內存。這些日子並沒有那麼多花費。 –