У меня есть файл (размер = ~ 1,9 ГБ), который содержит ~ 220 000 000 (~ 220 миллионов) слов / строк. У них есть дублирование, почти 1 повторяющееся слово на 100 слов.
Во второй программе я хочу прочитать файл. Мне удалось прочитать файл по строкам с помощью BufferedReader.
Теперь, чтобы удалить дубликаты, мы можем использовать Set (и его реализации), но Set имеет проблемы, как описано ниже в 3 различных сценариях:
- При размере 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 из такого гигантского файла. Огромное спасибо :)
Добавление информации к вопросу: Мои слова в основном являются буквенно-цифровыми и являются идентификаторами, уникальными в нашей системе. Следовательно, это не простые английские слова.
sort -u
возможно? - person Axel   schedule 20.09.2012