MapReduce подсчёта слов на горутинах и каналах
Условие
Реализуйте MapReduce: M горутин-мапперов делят между собой строки ввода (строка i достаётся мапперу i mod M) и для каждого слова отправляют пару в канал редьюсера с номером fnv1a32(слово) mod R (hash/fnv.New32a по байтам UTF-8). R горутин-редьюсеров считают частоты своих слов. Каналы редьюсеров закрываются, когда все мапперы закончили.
Ввод: M R (1 ≤ M, R ≤ 16), n (1 ≤ n ≤ 500), затем n строк (могут быть пустыми), слова разделены пробелами.
Вывод: для каждого редьюсера по порядку строку reducer r: K words, T total, где K число различных слов, T сумма частот; затем все слова по возрастанию (побайтово) в формате слово частота.
Решение должно быть конкурентным (горутины), а вывод не должен зависеть от порядка их выполнения.
Пример
2 2
3
go chan go
select go
chan
reducer 0: 0 words, 0 total
reducer 1: 3 words, 6 total
chan 2
go 3
select 1
Как подойти
M мапперов → R каналов по fnv-хешу → R редьюсеров со своими мапами; закрытие каналов после ожидания мапперов.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.