2014-02-05 2 views
0

Я начинаю писать карты, и я не уверен в некоторых свойствах функции уменьшения.Уменьшить свойства, которые я не уверен в

Таким образом, уменьшить получает (ключ, список значений) в качестве входного параметра ...

  1. является гарантировал, что список входных значений всегда содержит по крайней мере 2 членов? Итак, уникальный ключ, испускаемый преобразователем, никогда не будет передан редуктору?
  2. или, если в списке входных данных имеется только один элемент, гарантировано ли, что ключ уникален?
  3. может уменьшить излучение больше значений, чем размер списка входных значений?
  4. У меня есть большой список строк. Мне нужно найти все из них, которые не уникальны. Могу ли я сделать это с помощью только одной карты/уменьшить? Единственный способ, которым я вижу, чтобы сосчитать все уникальные строки на одной карте/уменьшение, а затем выбрать те из них, которые не являются уникальными по другой карте/уменьшить

Благодарности

+1

Есть некоторые из основных вопросов Q вокруг MR - взгляните на [Обработку данных с интенсивным текстом с помощью MapReduce] (http://lintool.github.io/MapReduceAlgorithms/) для быстрого введения и различных алгоритмов в МИСТЕР. –

ответ

1

списка входных значений к сокращению() может иметь один или несколько, но не нулевых элементов.

Все значения, отображаемые с/на уникальное значение ключа, передаются как список для уменьшения вместе с значением ключа. Если этот список содержит один член, вы можете предположить, что это значение ключа было отображено только на одно значение (или один раз, если вы считаете)

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

Вы можете решить вашу проблему с одной картой/уменьшения шага

0

Таким образом, проблема с строками, псевдокода:

map(string s) { 
    emit(s, 0); 
} 


reduce(string key, list values) { 
    if (valies.size() > 1) { emit(key, 1); return; } 
    if (valuse.contains(1)) { emit(key, 1); return; } 
} 

верно?

Смежные вопросы