Como remover palavras duplicadas usando Java quando as palavras são mais de 200 milhões?
Eu tenho um arquivo (tamanho = ~ 1,9 GB), que contém ~ 220.000.000 (~ 220 milhões) palavras / seqüências de caracteres. Eles têm duplicação, quase 1 palavra duplicada a cada 100 palavras.
No meu segundo programa, quero ler o arquivo. Eu sou bem sucedido para ler o arquivo por linhas usando BufferedReader.
Agora, para remover duplicatas, podemos usar Set (e suas implementações), mas Set tem problemas, conforme descrito a seguir em 3 cenários diferentes:
Com o tamanho de JVM padrão, o Set pode conter até 0,7-0,8 milhões de palavras e, em seguida, OutOfMemoryError.Com o tamanho de 512M JVM, o conjunto pode conter até 5-6 milhões de palavras e, em seguida, o erro OOM.Com o tamanho de 1024M JVM, o Set pode conter até 12 a 13 milhões de palavras e, em seguida, o erro OOM. Aqui, após 10 milhões de registros adicionados ao Set, as operações ficam extremamente lentas. Por exemplo, a adição dos próximos ~ 4000 registros levou 60 segundos.Tenho restrições que não posso aumentar ainda mais o tamanho da JVM e desejo remover palavras duplicadas do arquivo.
Por favor, deixe-me saber se você tem alguma idéia sobre quaisquer outras formas / abordagens para remover palavras duplicadas usando Java a partir de um arquivo tão gigantesco. Muito Obrigado :)
Adição de informações à pergunta: Minhas palavras são basicamente alfanuméricas e são IDs exclusivas de nosso sistema. Por isso, não são palavras inglesas simples.