reduce函数包含操作

时间:2018-04-02 23:05:05

标签: hadoop mapreduce

下面的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 个答案:

答案 0 :(得分:1)

如果我正确地理解你正在尝试

  1. 计算迭代器的长度
  2. 当元素数少于两个时,不输出任何内容
  3. 否则写出所有结果
  4. 知道这一点 - 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);
    }
    

    或者,you might be interested in this answer