Вопрос по – «Комбинатор» Класс по работе с картами

17

Combiner запускается после Mapper и перед Reducer, он будет получать в качестве входных данных все данные, генерируемые экземплярами Mapper на данном узле. затем испускает выход в редукторы.

А также, если функция уменьшенияcommutative and associative, то его можно использовать как Combiner.

Мой вопрос в том, что означает фраза & quot;commutative and associative& Quot; значит в этой ситуации?

Ваш Ответ

2   ответа
28

Ассоциативный здесь означает, что вы можете взять свою операцию и применить ее к любой подгруппе, затем применить ее к результату и получить тот же ответ:

(1) + (2 + 3) + (4 + 5 + 6)
  ==
(1 + 2) + (3 + 4) + (5) + (6)
  ==
...

Думайте о скобках здесь как о выполнении объединителя.

Коммутативный означает, что порядок не имеет значения, поэтому:

1 + 2 + 3 + 4 + 5 + 6
  ==
2 + 4 + 6 + 1 + 2 + 3
  ==
...

Например, дополнение, соответствует этому свойству, как показано ранее. & Quot; Максимальное & Quot; также подходит и для этого свойства, потому что max of maxs - это max. max (a, b) == max (b, a).

Медиана является примером, который не работает: медиана медиан не является истинной медианой.

Не забывайте еще одно важное свойство объединителя: типы ввода для ключа / значения и типы вывода для ключа / значения должны быть одинаковыми. Например, вы не можете взять строку: int и вернуть строку: float.

Часто редуктор может выводить какую-то строку вместо числового значения, что может помешать вам просто подключить редуктор в качестве объединителя.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded wayen wan
10

скажем, ваш редуктор может быть представлен функцией (в математическом выражении), называемой f (). Тогда ваш редуктор коммутативен, если f (a, b) = f (b, a) Например:

sum(A, B) is the same as sum(B, A) xor(A, B) is the same as xor(B, A) concat(A, B) is not the same as concat(B, A)

Для ассоциативности свойство состоит в том, что f (f (a, b), c) = f (a, f (b, c)). Например:

(A + B) + C is the same as A + (B + C) (A - B) - C is not the same as A - (B - C)

Таким образом, в контексте Map / Reduce ваш редуктор должен учитывать эти 2 свойства. Например, если ваш редуктор выполняет только sum () или max (), он учитывает оба свойства, а что-то вроде mean () или median () - нет, и, следовательно, вы не можете использовать его как объединитель.

Я лично рассматриваю объединители как мини-редукторы, которые запускаются в памяти после фазы карты, как оптимизацию для сокращения сетевого трафика, и коммутативность / ассоциативность действительно имеет смысл, если вы видите Map / Reduce следующим образом:

enter image description here

Похожие вопросы