1 import java.io.*; 2 import java.util.*; 3 4 import org.apache.hadoop.fs.Path; 5 import org.apache.hadoop.io.*; 6 import org.apache.hadoop.mapreduce.*; 7 import org.apache.hadoop.mapreduce.lib.output.*; 8 import org.apache.hadoop.mapreduce.lib.input.*; 9 import org.apache.hadoop.conf.*; 10 import org.apache.hadoop.util.*; 11 public class Score_Process extends Configured implements Tool { 12 /** 13 * 程序说明:主要用来实现计算学生的平均成绩。 14 * 数据输入:文件形式输入,每一行包含学生姓名 学生成绩。一个学生有多门成绩则有多行。例如:张三 98 15 * 数据输出:张三 84 学生姓名 学生平均成绩 16 * 实现思路:在map阶段<张三,(98,68,……)> 17 * **/ 18 19 public static class Map extends Mapper<LongWritable,Text,Text,IntWritable>{ 20 public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{ 21 String line=value.toString(); 22 System.out.println(line);//测试 23 StringTokenizer tokenizer=new StringTokenizer(line); 24 while(tokenizer.hasMoreTokens()){ 25 String name=tokenizer.nextToken(); 26 String strscore=tokenizer.nextToken(); 27 int intscore=Integer.parseInt(strscore); 28 context.write(new Text(name), new IntWritable(intscore)); 29 } 30 31 } 32 33 } 34 35 public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{ 36 public void reduce(Text key,Iterable<IntWritable>values,Context context) throws IOException, InterruptedException{ 37 int sun=0,count=0; 38 for(IntWritable val:values){ 39 sun+=val.get(); 40 count++; 41 } 42 int averscore=(int)sun/count; 43 context.write(key, new IntWritable(averscore)); 44 } 45 46 } 47 48 public int run(String[] args) throws Exception{ 49 Job job=new Job(getConf()); 50 job.setJarByClass(Score_Process.class); 51 job.setJobName("Score_Process"); 52 53 job.setOutputKeyClass(Text.class); 54 job.setOutputValueClass(IntWritable.class); 55 56 job.setMapperClass(Map.class); 57 //job.setCombinerClass(Reduce.class); 58 job.setReducerClass(Reduce.class); 59 60 job.setInputFormatClass(TextInputFormat.class); 61 job.setOutputFormatClass(TextOutputFormat.class); 62 63 FileInputFormat.setInputPaths(job, new Path(args[0])); 64 FileOutputFormat.setOutputPath(job, new Path(args[1])); 65 boolean success=job.waitForCompletion(true); 66 67 return success?0:1; 68 } 69 70 public static void main(String[] args)throws Exception{ 71 int ret=ToolRunner.run(new Score_Process(), args); 72 System.exit(ret); 73 } 74 75 }