MapReduce求最大值最小值平均值案例
发布时间
阅读量:
阅读量
该文本介绍了如何利用Hadoop MapReduce框架对学校班级学生的考试成绩数据进行处理,并提取每个学生的最高分、平均成绩(整数)和最低分。具体步骤如下:
Map阶段:将输入的成绩数据按逗号分割后,以学生姓名为键、分数为值进行转换。
Reduce阶段:通过Java Streams对所有学生成绩进行计算:
- 使用mapToDouble方法将分数转换为double类型。
- 使用max()方法获取最高分。
- 使用min()方法获取最低分。
- 使用average()方法计算平均成绩(整数)。
输出格式化结果显示每个学生的最高分、平均成绩和最低分。
最终结果会以特定格式写入存储位置中。
一、问题描述
学校的全校学生构成一个规模庞大的数据资源群体。
现在针对某班学生收集了一个月的学习成绩统计数据。
以下是具体学业表现表格:
科目 姓名 分数

求出每个学生的最高分,平均成绩(整数(不能使用强制类型转换)),最低分。
二、思路介绍
在map阶段将学生姓名作为key、成绩作为value进行处理;在reduce阶段对最大值、最小值及平均值进行计算。
三、代码实现
1、Map阶段
package com.studentscore;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class ScoreMap extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//获取行
String line = value.toString();
//按逗号切分
String[] split = line.split(",");
//将学生名作为key,分数作为value输出
context.write(new Text(split[1]), new IntWritable(Integer.parseInt(split[2])));
}
}
2、Reduce阶段
package com.studentscore;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ScoreReduce extends Reducer<Text, IntWritable, Text, NullWritable> {
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
//创建List对象存储学生成绩
List<Integer> scoreList = new ArrayList<>();
//将学生成绩写入List
for (IntWritable score : values) {
scoreList.add(score.get());
}
//输出
double scoreMax = scoreList.stream().mapToDouble(Integer::byteValue).max().getAsDouble();
double scoreMin = scoreList.stream().mapToDouble(Integer::byteValue).min().getAsDouble();
double scoreAvg = scoreList.stream().mapToDouble(Integer::byteValue).average().getAsDouble();
context.write(new Text(key + ":"
+ "\t" + "最高分" + Math.round(scoreMax) + ","
+ "\t" + "平均分" + Math.round(scoreAvg) + ","
+ "\t" + "最低分" + Math.round(scoreMin) + ";"), NullWritable.get());
}
}
3、驱动程序
package com.studentscore;
import com.utils.Driver;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import java.io.IOException;
public class ScoreDriver {
public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {
//调用工具类Driver执行驱动程序
Driver.run(ScoreDriver.class, ScoreMap.class, Text.class, IntWritable.class,
ScoreReduce.class, Text.class, NullWritable.class,
"D:\ Bigdata\ StudentScore\ studentscore.txt",
"D:\ Bigdata\ StudentScore\ Result");
}
}
四、结果展示


全部评论 (0)
还没有任何评论哟~
