Hadoop Reducer无法在一次迭代中累积所有值

时间:2011-11-01 03:55:36

标签: hadoop loops

我在Hadoop中有一个基本场景:

所有地图制作工具都会将所有值发送到相同的键。因此,所有值都以相同减速器结束。

但是,当我迭代reducer中的值时,迭代器不会处理所有条目。

例如,我可以使用以下代码:

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()'中的数据。但我无法这样做 - while循环过早中断。

我是否错过了关于Hadoop的关键点?我的假设是错的吗?

2 个答案:

答案 0 :(得分:1)

您正在使用

控制循环
values.hasNext()

但正在推进

rows.next()

rowsvalues是同一个对象吗?我怀疑是一个错字。 :)

答案 1 :(得分:0)

问题似乎是由于分配引用而不是值。

使用ArrayList作为累加器并克隆每个值,例如:

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

迭代器将以列表中的所有所需值终止。