代码之家  ›  专栏  ›  技术社区  ›  FlyingBurger

reduce函数包含操作

  •  -2
  • FlyingBurger  · 技术社区  · 7 年前

    下面的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 回复  |  直到 7 年前
        1
  •  1
  •   OneCricketeer Gabriele Mariotti    7 年前

    如果我正确理解你想

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

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

    或者, you might be interested in this answer

    推荐文章