Mapreduce - 无法获得正确的密钥

时间:2012-04-26 06:50:48

标签: hadoop mapreduce

您好我正在编写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));
    }
}

mapper imagin like

1955  52
1958  7
1985  22
1999  32

等等。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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