下面的降低功能包含操作是错误的,有人可以告诉我问题是什么以及解决此问题的任何解决方案吗?
伪代码如下:
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
如果我正确地理解您正在尝试
- 计算迭代器的长度
- 当您少于两个元素 时,什么也没输出
- 否则写出所有结果
知道这一点 - Java迭代器的合同指出,它只能消耗一次,并且没有"重置"功能
您必须存储结果,例如
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);
}
另外,您可能对此答案感兴趣