Как удалить дубликаты слов с помощью Java, когда слов больше 200 миллионов?

У меня есть файл (размер = ~ 1,9 ГБ), который содержит ~ 220 000 000 (~ 220 миллионов) слов / строк. У них есть дублирование, почти 1 дублированное слово на каждые 100 слов.

Во второй программе я хочу прочитать файл. Я успешно читать файл по строкам, используя BufferedReader.

Теперь, чтобы удалить дубликаты, мы можем использовать Set (и это 's реализации), но Set имеет проблемы, как описано ниже в 3 различных сценариях:

При размере JVM по умолчанию Set может содержать до 0,7–0,8 миллиона слов, а затем OutOfMemoryError.С размером 512M JVM Set может содержать до 5-6 миллионов слов, а затем ошибка OOM.С размером 1024M JVM Set может содержать до 12-13 миллионов слов, а затем ошибка OOM. Здесь после добавления 10 миллионов записей в Set операции становятся чрезвычайно медленными. Например, добавление следующих ~ 4000 записей заняло 60 секунд.

У меня есть ограничения, которые я могуt увеличить размер JVM, и я хочу удалить дубликаты слов из файла.

Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи о каких-либо других способах / подходах для удаления повторяющихся слов с использованием Java из такого гигантского файла. Большое спасибо :)

Добавление информации к вопросу: Мои слова в основном буквенно-цифровые и являются уникальными в нашей системе идентификаторами. Следовательно, они не простые английские слова.

Ответы на вопрос(13)

Ваш ответ на вопрос