mao/reduce实现求平均值

 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 }

 

posted @ 2014-07-07 10:30  林六天  阅读(519)  评论(0编辑  收藏  举报