¿Cómo eliminar palabras duplicadas usando Java cuando las palabras son más de 200 millones?

Tengo un archivo (tamaño = ~ 1.9 GB) que contiene ~ 220,000,000 (~ 220 millones) de palabras / cadenas. Tienen duplicación, casi 1 palabra duplicada cada 100 palabras.

En mi segundo programa, quiero leer el archivo. Tengo éxito para leer el archivo por líneas usando BufferedReader.

Ahora para eliminar los duplicados, podemos usar Set (y sus implementaciones), pero Set tiene problemas, como se describe a continuación en 3 escenarios diferentes:

Con el tamaño de JVM predeterminado, Set puede contener hasta 0.7-0.8 millones de palabras y luego OutOfMemoryError.Con un tamaño de 512M JVM, Set puede contener hasta 5-6 millones de palabras y luego un error de OOM.Con un tamaño de 1024M JVM, Set puede contener hasta 12-13 millones de palabras y luego un error de OOM. Aquí después de 10 millones de registros agregados a Set, las operaciones se vuelven extremadamente lentas. Por ejemplo, la adición de los próximos ~ 4000 registros, tomó 60 segundos.

Tengo restricciones de que no puedo aumentar aún más el tamaño de la JVM y quiero eliminar las palabras duplicadas del archivo.

Déjeme saber si tiene alguna idea acerca de otras formas / enfoques para eliminar palabras duplicadas usando Java de un archivo tan gigantesco. Muchas gracias :)

Adición de información a la pregunta: Mis palabras son básicamente alfanuméricas y son ID que son únicas en nuestro sistema. Por lo tanto, no son simples palabras en inglés.

Respuestas a la pregunta(13)

Su respuesta a la pregunta