mapreduce求每年的最低温度

来源:互联网 发布:淘宝商城 天猫渔具 编辑:程序博客网 时间:2024/04/30 17:46

main

import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Textimport org.apache.hadoop.mapreduce.Jobimport org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutFormatpublic class MinTemperature{public static void main(String [] args){if(args.length!=2){System.out.println("Usage:MinTemperature<input path><output path>");System.exit(-1);}Job job = new Job();        job.setJarByClass(MinTemperature.class);        job.setJobName("Min temperature");        FileInputFormat.addInputPath(job, new Path(args[0]));        FileOutputFormat.setOutputPath(job, new Path(args[1]));        job.setMapperClass(MinTemperatureMapper.class);        job.setReducerClass(MinTemperatureReducer.class);        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);        System.exit(job.waitForCompletion(true) ? 0 : 1);    }}

mapper

import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class MinTemperatureMapper extends Mapper<LongWritable,Text,Text,IntWritable>{private static final int MISSING=9999;public void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{String line=value.tostring();String year=line.substring(15,19);int airTemperature;if(line.CharAt(87)=='+'){airtemperature=Integer.parseInt(line.substring(88,92));}else{airTemperature=Integer.parseInt(line.substring(87,92));}String quality=line.substring(92,93);if(airTemperature!=MISSING&&quality.match("[01459]")){context.write(new Text(year),new IntWritable(airTemperature));}}}

reducer

import java.io.IOException;import org.apache.hadoop.io.IntWritable;import org.apahce.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class MinTemperaureReducer extends Reducer <Text,IntWriable,Text,IntWriable>{public void reduce(Text key,Iterable<IntWriable> values,Context context)throws IOException,InterruptedException{int minValue =Integer.MAX_VALUE;for(IntWriable value:values){minValue =Math.min(minValue,value.get());}context.write(key,new IntWriable(minValue));}}
0 0