Disco/MapReduce: использование chain_reader для разделения данных
Мой алгоритм в настоящее время использует nr_reduces 1, потому что мне нужно убедиться, что данные для данного ключа агрегированы.
Чтобы передать ввод следующей итерации, нужно использовать "chain_reader". Тем не менее, результаты сопоставления представлены в виде единого списка результатов, и это означает, что следующая итерация карты выполняется в виде единого сопоставителя! Есть ли способ разделить результаты для запуска нескольких картографов?
1 ответ
Я мог бы дать длинный ответ, но так как этому вопросу 3 года: проверьте эту страницу: http://discoproject.org/doc/disco/howto/dataflow.html
Вкратце: если для функции картографирования имеется N входных данных, выходной сигнал будет иметь значение N и путем настройки merge_partitions=False
ваше сокращение будет выводить N BLOB. Теперь, если вы хотите генерировать больше выходов, чем входов, вы можете передать partions=N
, Но когда ваша работа с диско состоит только из функции маппера, и вы хотите сгенерировать секционированный вывод, тогда добавьте простейшее сокращение fase в сочетании с параметрами, указанными выше, чтобы получить этот секционированный вывод.
@staticmethod Def Reduce(iter, out, params): для (ключ, значение) в iter: out.add(ключ, значение)