我正在比较O'Reilly的《 Hadoop:权威指南》(汤姆·怀特,第三版)中的示例Java代码,以及我自己尝试重新创建/理解它的尝试。我遇到的问题如下:
本书中的类(class)可以很好地编译:
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class MaxTemperatureReducer
extends Reducer<Text, IntWritable, Text, IntWritable> {
@Override
public void reduce(Text key, Iterable<IntWritable> values,
Context context)
throws IOException, InterruptedException {
int maxValue = Integer.MIN_VALUE;
for (IntWritable value : values) {
maxValue = Math.max(maxValue, value.get());
}
context.write(key, new IntWritable(maxValue));
}
}
但是,当我尝试自己测试它的一部分时,出现了“无法取消引用int”的编译错误:
public class TestMinValue {
public static void main(String[] args){
int[] values = {1,2,3,4,5};
int maxValue = Integer.MIN_VALUE;
for(int value : values){
maxValue = Math.max(maxValue, value.get());
}
}
}
我是Java新手,想了解它们之间的区别;为什么示例类正常工作,但是我的摘要却没有?
最佳答案
IntWritable
类型是一个类,它具有get()
方法。您正在使用原始类型int
。基元在Java中没有方法。