java - 将 IntWritable 转换为 int

标签 java hadoop mapreduce

我有以下代码,我不明白为什么在突出显示的行中使用了 get() 方法。如果我删除 get() 方法,它会抛出一个错误。

我可以从中得到的是:get() 方法返回 IntWritable 的 int 值。如果我错了,请纠正我。

public void reduce(IntWritable key, Iterator<IntWritable> values, OutputCollector<IntWritable, IntWritable> output, Reporter reporter) throws IOException {
    int sum = 0;
    while (values.hasNext()) {
        sum += values.next().get(); //error when removing the get()    
    }
}

最佳答案

你的理解是正确的。 RamPrasad G's answer也是正确的(+1),但是,只是为了更清楚:

sum 是整数。 values 是一个 IteratorIntWritable 元素,所以 values.next() 是一个 IntWritable。现在,hadoop的数据类型IntWritable并不等同于java的原始类型int,即使它们用于同一件事:存储整数值。

因此,您不能将 IntWritable 添加到 int(如果删除 get() 方法,就会发生这种情况)。它们不是同一类型。您必须将 IntWritable 转换为 int,这是通过 get() 方法完成的。

关于java - 将 IntWritable 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269940/

相关文章:

hadoop - yarn 容器启动失败失败异常和mapred-site.xml配置

hadoop - reducer 输出的每个键的值列表的排序

mapreduce - MPI标准与Mapreduce编程模型的比较?

java - Glassfish 和 JodaTime

Java SHA-1 散列一个无符号字节

apache - Hadoop DistributedCache缓存文件没有绝对路径?

java - 运行hadoop流和mapreduce作业:PipeMapRed.waitOutputThreads():子进程失败,代码为127

hadoop - 在YARN中如何分配容器?

Java 泛型 : Generic type defined as return type only

java - 使用对象数组/对象数组求平均值