Hadoop Reducer не может накапливать все значения за одну итерацию - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть базовый сценарий в Hadoop:

Все преобразователи отправляют все значения на тот же ключ . Поэтому все значения попадают на такой же редуктор.

Однако, когда я перебираю значения в редукторе, итератор не обрабатывает все записи.

Например, я мог бы иметь следующий код:

while (values.hasNext())
{
  result = result + values.next().toString() + "\n";
}
// Assume, that all values sent to this reducer is now in the 'result' variable
do_important_stuff(result);

Я хотел бы накапливать связанные значения и затем обрабатывать данные в функции do_important_stuff (). Но я не в состоянии это сделать - цикл пока прерывается слишком рано.

Я упускаю важный момент в Hadoop? Мое предположение неверно?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Вы управляете циклом с помощью

values.hasNext()

но продвигаемся с

rows.next()

Являются ли rows и values одним и тем же объектом? Я подозреваю опечатку. :)

0 голосов
/ 01 ноября 2011

Кажется, проблема связана с назначением ссылок вместо значений.

С ArrayList в качестве аккумулятора и клонированием каждого значения, например:

result = new ArrayList<Text>();
while (values.hasNext())
{
  result.add(new Text(values.next());
}

итератор завершит работу со всеми желаемыми значениями в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...