Должны ли map () и lower () возвращать пары ключ / значение одного типа? - PullRequest
1 голос
/ 07 декабря 2009

При написании задания MapReduce (в частности, Hadoop, если это уместно) необходимо определить функции map() и reduce(), обе из которых дают последовательность пар ключ / значение. Типы данных ключа и значения могут быть определены приложением.

В каноническом примере подсчета слов обе функции выдают пары типа (string, int), где ключом является слово, а значением - количество вхождений. Здесь - как и во всех других примерах, которые я видел, - выводимые ключи и типы значений согласованы между двумя функциями.

Должен / должен ли тип пары ключ / значение, полученной с map() и reduce() быть одинаковым в любом приложении MapReduce? Если да: почему?

Ответы [ 2 ]

6 голосов
/ 07 декабря 2009

Нет. Очевидно, конечно, что типы выходных пар для map и входных пар сокращения должны быть идентичны, так как одно передается другому.

Вполне возможно, однако, что у вас может быть задача сокращения, которая выводит другой тип, нежели входящие пары карт - например, если задача карты насчитывала слова в документе, но задача сокращения вычисляла среднее слово частота. В этом случае карта будет излучать целые числа, а сокращение - числа с плавающей запятой.

1 голос
/ 19 марта 2012

Map и Reduce output могут быть разными. Но вы должны сообщить приложению, что они есть. Вот как:

Методы setOutputKeyClass () и setOutuptValueClass () управляют типами вывода для карты и функциями сокращения, которые часто совпадают.

В случае, если они отличаются, вы можете установить ключ / тип выходных данных карты с помощью setMapOutputKeyClass () и SetMapOutputValue соответственно.

...