1.任务:查找所有年份最高气温
1)MaxTemperatureMapper.class
map的目的是吐出点对,年份=>气温
output.collect(new Text(year),new IntWritable(airTemperature));
key可以重复,例如可以是
1950 23
1950 22
1950 28
2)MaxTemperatureReducer.class
reducer的目的,是针对输入的所有key values;计算最终值,这里的输入就相当于 1950 => array(23,22,28)了
int maxValue = 0;
while(values.hasNext())
{
if(values.next().get()> maxValue)
{
maxValue = values.next().get();
}
output.collect(key,new IntWritable(maxValue)); //这里如果输入是上面说的1950的数据,输出就是 1950 28
}
3)进行实际操作
...
conf.setMapperClass(MaxTemperatureMapper.class);
conf.setReducerClass(MaxTemperatureReducer.class);
...
JobClient.runJob(conf);
4)合并结果集的操作类
在这里复用MaxTemperatureReducer.class
conf.setCombinerClass(MaxTemperatureReducer.class);
因为结果集合会是
1950 28
1951 22
1952 23
的样式
1)MaxTemperatureMapper.class
map的目的是吐出点对,年份=>气温
output.collect(new Text(year),new IntWritable(airTemperature));
key可以重复,例如可以是
1950 23
1950 22
1950 28
2)MaxTemperatureReducer.class
reducer的目的,是针对输入的所有key values;计算最终值,这里的输入就相当于 1950 => array(23,22,28)了
int maxValue = 0;
while(values.hasNext())
{
if(values.next().get()> maxValue)
{
maxValue = values.next().get();
}
output.collect(key,new IntWritable(maxValue)); //这里如果输入是上面说的1950的数据,输出就是 1950 28
}
3)进行实际操作
...
conf.setMapperClass(MaxTemperatureMapper.class);
conf.setReducerClass(MaxTemperatureReducer.class);
...
JobClient.runJob(conf);
4)合并结果集的操作类
在这里复用MaxTemperatureReducer.class
conf.setCombinerClass(MaxTemperatureReducer.class);
因为结果集合会是
1950 28
1951 22
1952 23
的样式