Jak usunąć duplikaty słów za pomocą Java, gdy słowa mają ponad 200 milionów?

Mam plik (rozmiar = ~ 1,9 GB) zawierający ~ 220 000 000 (~ 220 milionów) słów / ciągów. Mają duplikat, prawie 1 duplikat słowa co 100 słów.

W moim drugim programie chcę przeczytać plik. Udało mi się odczytać plik według linii za pomocą BufferedReader.

Teraz, aby usunąć duplikaty, możemy użyć Set (i jego implementacji), ale Set ma problemy, jak opisano poniżej w 3 różnych scenariuszach:

Przy domyślnym rozmiarze JVM, Set może zawierać do 0,7-0,8 miliona słów, a następnie OutOfMemoryError.Przy wielkości 512M JVM, zestaw może zawierać do 5-6 milionów słów, a następnie błąd OOM.Przy wielkości 1024M JVM, Set może zawierać do 12-13 milionów słów, a następnie błąd OOM. Tutaj po dodaniu 10 milionów rekordów do Set, operacje stają się niezwykle powolne. Na przykład dodanie kolejnych ~ 4000 rekordów zajęło 60 sekund.

Mam ograniczenia, że ​​nie mogę zwiększyć rozmiaru JVM i chcę usunąć duplikaty słów z pliku.

Daj mi znać, jeśli masz jakieś pojęcie o innych sposobach usunięcia duplikatów słów przy użyciu Java z tak gigantycznego pliku. Wielkie dzięki :)

Dodanie informacji do pytania: Moje słowa są w zasadzie alfanumeryczne i są identyfikatorami unikalnymi w naszym systemie. Dlatego nie są to zwykłe angielskie słowa.

questionAnswers(13)

yourAnswerToTheQuestion