将IntWritatble转换为int

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)

vef*_*hym 7

你的理解是正确的.RamPrasad G的答案也是正确的(+1),但是,为了让它更清晰:

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

因此,您无法添加IntWritableint(如果删除该get()方法,则会执行此操作).它们不是同一类型.您必须将a转换IntWritable为a int,这是由get()方法完成的.