Hadoop MapReduce 遍历 reduce 调用的输入值

标签 hadoop mapreduce

我正在测试一个简单的 mapreduce 应用程序,但我在尝试理解当我迭代 reduce 调用的输入值时会发生什么时遇到了一些困难。

这是一段行为异常的代码..

public void reduce(Text key, Iterable<E> values, Context context)
    throws IOException, InterruptedException{

    Iterator<E> iterator = values.iterator();
    E first = (E)statesIter.next();

    while(statesIter.hasNext()){
        E state = statesIter.next();

        System.out.println(first.toString());
        // some other stuff
    }
    // some other stuff
}

所以没有什么奇怪的.. 除了每个 println 调用实际上打印不同的字符串。因此,每次我调用 next() 方法时,first 引用的对象都会发生变化。

那么为什么会出现这种奇怪的行为呢?

最佳答案

这有点违反直觉,但实际上是documented in the API docs -- Hadoop 重用键/值,如果您想保留它们,您应该克隆它们。

关于Hadoop MapReduce 遍历 reduce 调用的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976981/

相关文章:

python - 在Hive数据库中匹配两个字段的最有效方法

hadoop - HDFS 如何在磁盘上分配存储空间

sql - 更改表/分区的工作 “Concatenate”命令

hadoop - 没有这样的文件或目录-Hadoop或HDFS错误

Hadoop Pig 计数

java - 使用 MapReduce 从多个 MongoDB 集合中搜索 - Java

hadoop - 尝试从 hdfs 输出中读取 hadoop

hadoop - Spark : How to start remotely Jupyter in 'yarn_client' mode from a different user

r - 在 R 中使用 Segue 无限期配置 EMR 集群

sorting - 如何在 Hive 中对文件进行重复数据删除并保持原始排序顺序?