我有以下代码,我不明白为什么在突出显示的行中使用了 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
是一个 Iterator
到 IntWritable
元素,所以 values.next()
是一个 IntWritable
。现在,hadoop的数据类型IntWritable
并不等同于java的原始类型int
,即使它们用于同一件事:存储整数值。
因此,您不能将 IntWritable
添加到 int
(如果删除 get()
方法,就会发生这种情况)。它们不是同一类型。您必须将 IntWritable
转换为 int
,这是通过 get()
方法完成的。
关于java - 将 IntWritable 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37269940/