У меня есть файл (размер = ~ 1.9 ГБ), который содержит ~ 220 000 000 (~ 220 миллионов) слов/строк. У них есть дублирование, почти 1 дублирующее слово каждые 100 слов.
В моей второй программе я хочу прочитать файл. Мне удастся прочитать файл по строкам с помощью BufferedReader.
Теперь, чтобы удалить дубликаты, мы можем использовать Set (и его реализации), но Set имеет проблемы, как описано ниже в трех разных сценариях:
- С размером JVM по умолчанию Set может содержать до 0,7-0,8 миллиона слов, а затем OutOfMemoryError.
- С размером JVM 512M, Set может содержать до 5-6 миллионов слов, а затем ошибку OOM.
- При размере JVM 1024M Set может содержать до 12-13 миллионов слов, а затем ошибку OOM. Здесь, после добавления 10 миллионов записей в Set, операции становятся чрезвычайно медленными. Например, добавив следующие 4000 записей, потребовалось 60 секунд.
У меня есть ограничения, которые я больше не могу увеличить размер JVM, и я хочу удалить повторяющиеся слова из файла.
Пожалуйста, дайте мне знать, если вы знаете какие-либо другие способы/подходы к удалению повторяющихся слов с использованием Java из такого гигантского файла. Большое спасибо:)
Добавление информации к вопросу: Мои слова в основном являются буквенно-цифровыми, и они являются идентификаторами, которые являются уникальными в нашей системе. Следовательно, это не просто английские слова.