Wie entferne ich doppelte Wörter mit Java, wenn die Anzahl der Wörter mehr als 200 Millionen beträgt?

Ich habe eine Datei (Größe = ~ 1,9 GB), die ~ 220.000.000 (~ 220 Millionen) Wörter / Zeichenfolgen enthält. Sie haben eine Verdoppelung, fast 1 doppeltes Wort alle 100 Wörter.

In meinem zweiten Programm möchte ich die Datei lesen. Ich kann die Datei mit BufferedReader zeilenweise lesen.

Um nun Duplikate zu entfernen, können wir Set (und seine Implementierungen) verwenden, aber Set hat Probleme, wie nachfolgend in 3 verschiedenen Szenarien beschrieben:

Bei der Standardgröße der JVM kann Set bis zu 0,7-0,8 Millionen Wörter und dann OutOfMemoryError enthalten.Bei einer JVM-Größe von 512 MB kann Set bis zu 5 bis 6 Millionen Wörter enthalten, und anschließend tritt ein OOM-Fehler auf.Bei einer JVM-Größe von 1024 MB kann Set bis zu 12 bis 13 Millionen Wörter enthalten, und dann tritt ein OOM-Fehler auf. Hier werden die Vorgänge nach dem Hinzufügen von 10 Millionen Datensätzen zu Set extrem langsam. Das Hinzufügen der nächsten ~ 4000 Datensätze dauerte beispielsweise 60 Sekunden.

Ich habe Einschränkungen, dass ich die JVM-Größe nicht weiter erhöhen kann und doppelte Wörter aus der Datei entfernen möchte.

Bitte lassen Sie mich wissen, wenn Sie eine Idee haben, wie Sie mithilfe von Java doppelte Wörter aus einer solchen gigantischen Datei entfernen können. Danke vielmals :)

Hinzufügung von Informationen zur Frage: Meine Wörter sind grundsätzlich alphanumerisch und es handelt sich um IDs, die in unserem System eindeutig sind. Daher sind sie keine einfachen englischen Wörter.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage