reduce 函数包含操作

reduce function contains operations

下面的reduce函数包含在Hadoop中的操作错误,谁能告诉我问题是什么以及解决这个问题的任何解决方案?

伪代码如下:

Algorithm:reduce(String key, Iterator values)

int numDocs = 0
for all v in values do
  numDocs += v;
end for

if numDocs < 2 then
  return none
end if

for all v in values do
  Emit(key,res)
end for

如果我正确理解您正在尝试

  1. 计算迭代器的长度
  2. 当元素少于两个时不输出任何内容
  3. 否则写出所有结果

知道这一点 - Java 迭代器的契约声明它只能被消耗一次,并且没有 "reset" 函数

您必须存储结果,例如

List docs = new ArrayList();
int numDocs = 0;
for (; values.hasNext(); numDocs++) {
    docs.add(values.next());
} 

if (numDocs < 2) {
    return;
} 

for (Object v : docs) {
  context.write(key,v);
}

或者,you might be interested in this answer