地图缩减 - 无法获取关键密钥



嗨,我正在编写地图还原代码以查找最高温度。问题是我得到了最高温度,但没有相应的钥匙。

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

等等。

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新