嗨,我正在编写地图还原代码以查找最高温度。问题是我得到了最高温度,但没有相应的钥匙。
public static class TemperatureReducer extends Reducer<Text,IntWritable,Text,IntWritable>{
Text year=new Text();
int maxTemperature=Integer.MIN_VALUE;
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
for(IntWritable valTemp:values) {
maxTemperature=Math.max(maxTemperature, valTemp.get());
}
//System.out.println("The maximunm temperature is " + maxTemperature);
context.write(year, new IntWritable(maxTemperature));
}
}
映射器想象喜欢
1955 52
1958 7
1985 22
1999 32
等等。
它覆盖密钥并打印所有数据。我只想要最高温度和它的年份。
我发现您的代码示例存在一些问题:
-
在reduce方法中重置maxTemperature(作为第一条语句),目前您有一个错误,它将输出所有前面的键/值看到的最高温度
-
你在哪里配置
year
的内容? 事实上你不需要,只需调用context.write(key, new IntWritable(maxTemperature);
,因为输入键是年份 -
您可能希望创建一个 IntWriable 实例变量并重用它,而不是在写出输出值时创建新的 IntWritable(这是一个效率问题,而不是问题的潜在原因)