wordcount求学生平均成绩案例 发表于 2018-03-25 | 更新于 2018-08-15 | 分类于 大数据 | 评论数: | 阅读次数: 1234567891011121314package com.Practice.AverageScores;import com.Practice.SameFriend.SameFriend;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import java.io.IOException;import java.util.StringTokenizer;/** * 求学生平均成绩 * 计算学生考试平均成绩 源数据: 张三 98 李四 96 王五 95 张三 90 李四 92 王五 99 张三 80 李四 90 王五 94 张三 82 李四 92 */public class AverageScores { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Job job = Job.getInstance(conf); job.setJar("wordcountJar/wordcount.jar"); job.setMapperClass(AverageScoresMapper.class); job.setReducerClass(AverageScoresReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); Path inputPath = new Path("input/AverageScore"); Path outputPath = new Path("output/AverageScore"); if(fs.isDirectory(outputPath)){ fs.delete(outputPath,true); } FileInputFormat.setInputPaths(job,inputPath); FileOutputFormat.setOutputPath(job,outputPath); boolean waitForCompletion = job.waitForCompletion(true); System.exit(waitForCompletion ? 0 : 1 ); } public static class AverageScoresMapper extends Mapper<LongWritable,Text,Text,IntWritable> { private Text outKey = new Text(); private IntWritable outValue = new IntWritable(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] splits = value.toString().split("\t"); outKey.set(splits[0]); outValue.set(Integer.parseInt(splits[1])); context.write(outKey,outValue); } } public static class AverageScoresReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable outValue = new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int avg = 0 ; int sum = 0 ; int count = 0 ; for (IntWritable val : values) { int score = val.get(); sum += score ; count ++ ; } avg = sum /count ; outValue.set(avg); context.write(key,outValue); } }}