下面的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
答案 0 :(得分:1)
如果我正确地理解你正在尝试
知道这一点 - Java Iterator的合同规定它只能被消耗一次,并且没有&#34;重置&#34;功能
您必须存储结果,例如
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);
}