Sri*_*Sri 10 java hadoop mapreduce
我有以下代码,我不明白为什么get()方法已在突出显示的行中使用.如果我删除该get()方法,它会抛出一个错误.
我可以从中获取的是:get()method返回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()
}
}
Run Code Online (Sandbox Code Playgroud)
你的理解是正确的.RamPrasad G的答案也是正确的(+1),但是,为了让它更清晰:
sum是int.values是一种Iterator以IntWritable的元素,所以values.next()是一个IntWritable.现在,IntWritablehadoop的数据类型不等同于intjava 的原始类型,即使它们用于同一事物:存储整数值.
因此,您无法添加IntWritable到int(如果删除该get()方法,则会执行此操作).它们不是同一类型.您必须将a转换IntWritable为a int,这是由get()方法完成的.