如何对hadoop中的所有键/值对进行一般缩减

时间:2013-04-29 09:56:29

标签: java hadoop parallel-processing mapreduce

我是hadoop的新手,我尝试用Java执行一些map / reduce任务。我想知道如何为所有键/值对执行reduce操作。

例如,假设我们在一个月中的每一天都有当天的最高温度。我们把这一天作为关键,将温度作为一个值,我希望得到全月最高温度的关键/值。

我希望我的问题很明确!

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。只需将作业配置为通过job.setNumReduceTasks(1)使用单个reducer。这个单一的reducer将遍历所有键/值对。在reduce()方法中,您只需搜索最大值,并在cleanup()方法中输出最终结果。 (k, v) = (year, temperature)的示例:

public class MaxTemperatureReducer extends Reducer<IntWritable, DoubleWritable, IntWritable, DoubleWritable> {
    private static int year = 0;
    private static double maxTemp = 0.0;

    @Override
    public void reduce(IntWritable key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {
        for (DoubleWritable value : values) {
            if (value.get() > maxTemp) {
                year = key.get();
                maxTemp = value.get();
            }
        }
    }

    @Override
    public void cleanup(Context context) throws IOException, InterruptedException {
        context.write(new IntWritable(year), new DoubleWritable(maxTemp));
    }
}

答案 1 :(得分:0)

简单的方法是简单地使用任意键(“月”)并且在温度和日期都有值 - 然后在您的reduce方法中,找到温度的最高值并返回白天和温度。