降低功能包含操作



下面的降低功能包含操作是错误的,有人可以告诉我问题是什么以及解决此问题的任何解决方案吗?

伪代码如下:

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. 时,什么也没输出
  4. 否则写出所有结果

知道这一点 - 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);
}

另外,您可能对此答案感兴趣

最新更新