Эффективный подсчет слов Hadoop для большого файла

Я хочу реализовать редуктор hadoop для подсчета слов. В моем редукторе я использую хеш-таблицу для подсчета слов. Но если мой файл очень большой, хеш-таблица будет использовать слишком много памяти. Как я могу решить эту проблему? (Например, файл с 10 миллионами строк каждый редуктор получает 100 миллионов слов, как он может считать слова, хеш-таблица требует 100 миллионов ключей) Моя текущая реализация находится в Python. Есть ли умный способ уменьшить объем памяти?

1 ответ

Решение

Самый эффективный способ сделать это - сохранить хэш-карту частоты слов в ваших преобразователях и сбросить их в выходной контекст, когда они достигнут определенного размера (скажем, 100 000 записей). Затем очистите карту и продолжайте (не забудьте сбросить карту и в методе очистки).

Если у вас все еще есть 100 миллионов слов, то вам придется либо долго ждать окончания работы редукторов, либо увеличить размер кластера и использовать больше редукторов.

Другие вопросы по тегам