1

嗨,我正在编写 map reduce 代码来查找最高温度。问题是我得到了最高温度但没有相应的钥匙。

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

等等。

它正在覆盖密钥并打印所有数据。我只想要最高温度和年份。

4

1 回答 1

1

我发现您的代码示例有一些问题:

  1. 重置reduce方法中的maxTemperature(作为第一条语句),此时你有一个错误,它会输出所有前面的键/值看到的最高温度

  2. 你在哪里配置的内容year?实际上你不需要,只需调用context.write(key, new IntWritable(maxTemperature);,因为输入键是年份

  3. 您可能想要创建一个 IntWritable 实例变量并重新使用它,而不是在写出输出值时创建一个新的 IntWritable (这是一个效率问题,而不是您的问题的潜在原因)

于 2012-04-26T10:02:21.110 回答