我是hadoop新手,我尝试用java执行一些map/reduce任务。我想知道如何对所有键/值对执行reduce操作。例如,假设我们一个月的每一天都有今天的最高温度。我们把这一天作为一个键,把温度作为一个值,我希望得到这个月最高温度的键/值。我希望我的问题是清楚的!谢谢你的帮助。
cyvaqqii1#
是的,有可能。只需通过job.setnumreducetasks(1)将作业配置为使用单个减速机。这个简化程序将遍历所有键/值对。在 reduce() 方法只需在 cleanup() 方法输出最终结果。示例 (k, v) = (year, temperature) :
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)); } }
w46czmvw2#
简单的方法是简单地使用任意键(“月”)并在值中同时包含温度和日期-然后在reduce方法中,找到温度的最高值并返回日期和温度。
2条答案
按热度按时间cyvaqqii1#
是的,有可能。只需通过job.setnumreducetasks(1)将作业配置为使用单个减速机。这个简化程序将遍历所有键/值对。在
reduce()
方法只需在cleanup()
方法输出最终结果。示例(k, v) = (year, temperature)
:w46czmvw2#
简单的方法是简单地使用任意键(“月”)并在值中同时包含温度和日期-然后在reduce方法中,找到温度的最高值并返回日期和温度。