Должны ли map() и reduce() возвращать пары ключ / значение одного типа?

StackOverflow https://stackoverflow.com/questions/1859420

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top