题目描述

关于对于学生成绩相关的练习题,之前是一个入门级别的需求,现在对这些需求进行增强,首先看数据的改变:

computer,huangxiaoming,85,86,41,75,93,42,85
computer,xuzheng,54,52,86,91,42
computer,huangbo,85,42,96,38
english,zhaobenshan,54,52,86,91,42,85,75
english,liuyifei,85,41,75,21,85,96,14
algorithm,liuyifei,75,85,62,48,54,96,15
computer,huangjiaju,85,75,86,85,85
english,liuyifei,76,95,86,74,68,74,48
english,huangdatou,48,58,67,86,15,33,85
algorithm,huanglei,76,95,86,74,68,74,48
algorithm,huangjiaju,85,75,86,85,85,74,86
computer,huangdatou,48,58,67,86,15,33,85
english,zhouqi,85,86,41,75,93,42,85,75,55,47,22
english,huangbo,85,42,96,38,55,47,22
algorithm,liutao,85,75,85,99,66
computer,huangzitao,85,86,41,75,93,42,85
math,wangbaoqiang,85,86,41,75,93,42,85
computer,liujialing,85,41,75,21,85,96,14,74,86
computer,liuyifei,75,85,62,48,54,96,15
computer,liutao,85,75,85,99,66,88,75,91
computer,huanglei,76,95,86,74,68,74,48
english,liujialing,75,85,62,48,54,96,15
math,huanglei,76,95,86,74,68,74,48
math,huangjiaju,85,75,86,85,85,74,86
math,liutao,48,58,67,86,15,33,85
english,huanglei,85,75,85,99,66,88,75,91
math,xuzheng,54,52,86,91,42,85,75
math,huangxiaoming,85,75,85,99,66,88,75,91
math,liujialing,85,86,41,75,93,42,85,75
english,huangxiaoming,85,86,41,75,93,42,85
algorithm,huangdatou,48,58,67,86,15,33,85
algorithm,huangzitao,85,86,41,75,93,42,85,75

一、数据解释

数据字段个数不固定:
第一个是课程名称,总共四个课程,computer,math,english,algorithm,
第二个是学生姓名,后面是每次考试的分数

二、统计需求:

1、统计每门课程的参考人数和课程平均分

2、统计每门课程参考学生的平均分,并且按课程存入不同的结果文件,要求一门课程一个结果文件,并且按平均分从高到低排序,分数保留一位小数

3、求出每门课程参考学生成绩最高的学生的信息:课程,姓名和平均分

三、解题思路

mapper阶段的输出:

key: 课程

value:分数

reducer阶段的输出:

key: 课程

value: 平均分数和人数

四、具体代码实现

package com.ghgj.mazh.mapreduce.exercise.coursescore3;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
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;import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class CourseScoreMR_Pro_01 {public static void main(String[] args) throws Exception {/*** 一些参数的初始化*/String inputPath = "D:\\bigdata\\coursescore2\\input";String outputPath = "D:\\bigdata\\coursescore2\\output";/*** 初始化一个Job对象*/Configuration conf = new Configuration();Job job = Job.getInstance(conf);/*** 设置jar包所在路径*/job.setJarByClass(CourseScoreMR_Pro_01.class);/*** 指定mapper类和reducer类 等各种其他业务逻辑组件*/job.setMapperClass(Mapper_CS.class);job.setReducerClass(Reducer_CS.class);// 指定maptask的输出类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(DoubleWritable.class);// 指定reducetask的输出类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);/*** 指定该mapreduce程序数据的输入和输出路径*/Path input = new Path(inputPath);Path output = new Path(outputPath);FileSystem fs = FileSystem.get(conf);if (fs.exists(output)) {fs.delete(output, true);}FileInputFormat.setInputPaths(job, input);FileOutputFormat.setOutputPath(job, output);/*** 最后提交任务*/boolean waitForCompletion = job.waitForCompletion(true);System.exit(waitForCompletion ? 0 : 1);}/*** Mapper组件:* <p>* 输入的key:* 输入的value: computer,liutao,85,75,85,99,66,88,75,91* <p>* 输出的key:  课程* 输入的value:  分数*/private static class Mapper_CS extends Mapper<LongWritable, Text, Text, DoubleWritable> {Text keyOut = new Text();DoubleWritable valueOut = new DoubleWritable();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] splits = value.toString().split(",");String course = splits[0];int sum = 0;int num = 0;for(int i=2; i<splits.length; i++){sum += Integer.valueOf(splits[i]);num ++;}// 直接取整数double avgScore = Math.round(sum * 1D / num * 10) / 10D;keyOut.set(course);valueOut.set(avgScore);context.write(keyOut, valueOut);}}/*** Reducer组件:* <p>* 输入的key:* 输入的values:* <p>* 输出的key:  课程* 输入的value:   平均分数 和 人数*/private static class Reducer_CS extends Reducer<Text, DoubleWritable, Text, Text> {Text valueOut = new Text();@Overrideprotected void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;int num = 0;for(DoubleWritable v: values){sum += v.get();num ++;}// 直接取整数double avgScore = Math.round(sum * 1D / num * 10) / 10D;valueOut.set(avgScore + "\t" + num);context.write(key, valueOut);}}
}

五、执行结果

algorithm    71.3    6
computer    69.6    10
english 66.0    9
math    72.6    7

至此,大功告成

MapReduce--12--学生成绩(增强版)--需求1相关推荐

  1. 【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)

    目录 1 数据源(学生成绩.csv) 2 hadoop平台上传数据源 3 idea代码 3.1 工程框架 3.2 导入依赖 3.3 系统主入口(menu) 3.4 六个mapreduce 3.4.1  ...

  2. 对学生成绩表按计算机应用成绩排序,计算机等级考试EXCEL练习题-12学生成绩表2...

    计算机等级考试EXCEL练习题 1. 使用数组公式,根据Sheet1中的数据,计算总分和平均分,将其计算结果保存到 表中的"总分"列和"平均分"列当中. 2. ...

  3. 计算机考试题目学生成绩表,计算机等级考试EXCEL练习题-12学生成绩表2

    计算机等级考试EXCEL练习题 1. 使用数组公式,根据Sheet1中的数据,计算总分和平均分,将其计算结果保存到 表中的"总分"列和"平均分"列当中. 2. ...

  4. 学生管理系统(Java版)(普通版(增删改查)、增强版(登录、注册、忘记密码))

    普通版需求如下: 学生管理系统分为四个部分:增删改查 主菜单: 增部分:(在增加前,我们要判断id的唯一性,因此我们可以遍历ArrayList数组,再调用String的equals方法,进行判断) 删 ...

  5. 基于Web的学生成绩管理系统

    源码及论文下载: http://www.byamd.xyz/tag/java/ 摘 要 本次课程设计课题为学生成绩管理系统,该学生成绩管理系统主要包括前台用户界面的开发和后台数据库的开发,重点在于后台 ...

  6. (C语言实现)班级学生成绩管理系统

    目录 前言 一.设计题目与要求 二. 设计软硬件环境 三.功能设计与描述 (1)登录界面 (2)菜单界面 (3)文件操作 (4)成绩输入 (5)成绩查找 (6)成绩修改 (7)成绩删除 (9)成绩排序 ...

  7. 学生成绩查询系统需求规格说明书

    学生成绩管理系统需求规格说明书 班    级:信2002-1 姓    名:张居然 学    号:12345678765432 授课教师:xxx 2022年4月23 日 xxxxx大学 一.需求分析 ...

  8. miui12.5增强版刷机教程

    8.10号雷总发布了mix4手机,顺便讲了一下miui12.5增强版的介绍 反正介绍了半天,吹的很牛啊 同时官方也发布了相应的推送公告,但是等了很久一直不更新,看来只能自己动手了 1.获得miui12 ...

  9. C++课程设计 学生成绩管理系统

    学生成绩管理系统 1.编译器 2.系统功能需求分析 2.1学生成绩管理系统需求分析 2.2三个类功能需求分析 2.2.1 Person类 2.2.2 Student类 2.2.3 Undergradu ...

  10. 学生成绩系统用例图模型

    在uml模型共享平台上发布了一个学生成绩系统的需求,并且绘制出了用例图,如下图,欢迎大家参与讨论,该系统全部模型查看连接http://euml.trufun.net/ 本文转自 trufun 51CT ...

最新文章

  1. json转换模型利器--JSONExport
  2. 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)...
  3. centos 6.5安装VMware tools
  4. 经典C语言程序100例之四七
  5. 鲶鱼效应:为什么要适当的贷款?
  6. mpvue v-html 代替方法 使用 mpvue-wxparse
  7. import pandas as pd什么意思_Pandas万花筒:让绘图变得更美观
  8. 计算机四级计算机组成与接口总结,计算机等级测验四级计算机组成与接口.docx...
  9. 腾讯云服务器CentOS 7安装JAVA JDK并运行class文件
  10. linux开发板调试,用arm-gdb和gdbserver调试开发板的方法
  11. appium工作原理及启动方式
  12. InnoDB 存储引擎(8)——InnoDB 存储引擎文件
  13. 一次监视雷达行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  14. 现代通用计算机析雏形,计算机作业一、选择题 1.______B______是现代通用计算机的雏形。 A. 宾州大学于1946年2月研制成功的E...
  15. pd.plotting.register_matplotlib_converters() 的作用
  16. 蓝牙耳机买什么品牌好一些?2022蓝牙耳机品牌排行榜10强
  17. Eclipse照亮Java众生 扩大地盘
  18. 实现PPT的在线预览(动态,及转PDF)
  19. phase test1
  20. 用vmware安装雨林木风虚拟机系统的坑

热门文章

  1. XML、JSON 与 CSV 文件处理
  2. 书院主持人 Java 方法:标记法
  3. 心中的感慨,当前的社会太现实了
  4. 个人微信号二次开发的实现,api接口
  5. 关于搜索引擎营销SEM的阶段性总结
  6. 三星android黑屏打不开怎么办,三星手机启动后屏幕打不开怎么办
  7. html文本效果变大,如何制作特效字幕:缓缓变大显示的文字效果 附缓慢放大字幕效果图...
  8. 如何在Mac笔记本电脑上查看电池用量历史记录及电池状态?
  9. 字节软件测试学习,软件测试中http_load和Glimpse工具的学习
  10. allinone rotator演示40种不同的焦点图轮播