Disco / MapReduce: использование chain_reader для разделения данных - PullRequest
2 голосов
/ 02 апреля 2010

Мой алгоритм в настоящее время использует nr_reduces 1, потому что мне нужно убедиться, что данные для данного ключа агрегированы.

Чтобы передать ввод следующей итерации, нужно использовать «chain_reader». Тем не менее, результаты сопоставления представлены в виде единого списка результатов, и это означает, что следующая итерация карты происходит в виде единого сопоставителя! Есть ли способ разделить результаты, чтобы вызвать несколько картографов?

1 Ответ

0 голосов
/ 21 апреля 2013

Я мог бы дать длинный ответ, но так как этому вопросу 3 года: проверьте эту страницу: http://discoproject.org/doc/disco/howto/dataflow.html#single-partition-map

Короче говоря: если для функции картографирования имеется N входных данных, выходной сигнал будет N, и, установив merge_partitions=False, ваше уменьшение выдаст N BLOB-объектов. Теперь, если вы хотите генерировать больше выходов, чем входов, вы можете передать partions=N. Но когда ваша работа с диско состоит только из функции mapper и вы хотите сгенерировать секционированный вывод, тогда добавьте простейшее сокращение fase в сочетании с параметрами, указанными выше, чтобы получить этот секционированный вывод.

@staticmethod
def reduce(iter, out, params):
    for (key, value) in iter:
        out.add(key, value)
...