Scala 练习题 学生分数案例
- 一、相关信息
题目:
1、统计班级人数
2、统计学生的总分
3、统计总分年级排名前十学生各科的分数
4、统计总分大于年级平均分的学生
5、统计每科都及格的学生
6、统计偏科最严重的前100名学生
数据样例(部分数据):
1.学生信息数据:students.txt
- 1500100001,施笑槐,22,女,文科六班
- 1500100002,吕金鹏,24,男,文科七班
- 1500100003,单乐蕊,22,女,理科六班
- 1500100004,葛德曜,24,男,理科三班
- 1500100005,宣谷芹,22,女,理科五班
- 1500100006,边昂雄,21,男,理科二班
- 1500100007,尚孤风,23,女,文科六班
- 1500100008,符半双,22,女,理科六班
- 1500100009,沈德昌,21,男,理科一班
- 1500100010,羿彦昌,23,男,理科六班
- 1500100011,宰运华,21,男,理科三班
- 1500100012,梁易槐,21,女,理科一班
- 1500100013,逯君昊,24,男,文科二班
- 1500100014,羿旭炎,23,男,理科五班
- 1500100015,宦怀绿,21,女,理科一班
- 1500100016,潘访烟,23,女,文科一班
- 2.学生分数信息(部分):
- 500100001,1000001,98
- 1500100001,1000002,5
- 1500100001,1000003,0
- 1500100001,1000004,29
- 1500100001,1000005,85
- 1500100001,1000006,52
- 1500100002,1000001,139
- 1500100002,1000002,102
- 1500100002,1000003,44
- 1500100002,1000004,18
- 1500100002,1000005,46
- 1500100002,1000006,91
- 1500100003,1000001,48
- 3.学生科目信息(部分):
- 1000001,语文,150
- 1000002,数学,150
- 1000003,英语,150
- 1000004,政治,100
- 1000005,历史,100
- 1000006,物理,100
- 1000007,化学,100
- 1000008,地理,100
- 1000009,生物,100
- 二、题目代码编写
1、统计班级人数
- package shujia
- import scala.io.Source
- //1、统计班级人数
- /**
- * 以下所有的方法都是返回新的集合,不会修改原始的集合
- * 同时以下这些方法在set集合中也有,除了sort
- * foreach:遍历数据
- * map:一条一条处理数据
- * filter:过滤数据
- * flatMap:将一行转换成多行
- * sortBy:排序
- * groupBy:分组
- */
- object Test2 {
- def main(args: Array[String]): Unit = {
- //读取文件
- val students: List[String] = Source.fromFile("data/score.txt").getLines().toList
- //按照逗号分割
- val stringses: List[Array[String]] = students.map(line => line.split(","))
- //3.过滤脏数据
- val listFilter: List[Array[String]] = stringses.filter(line => line.length == 3)
- //4.取数据
- val scores: List[(String, Int)] = listFilter.map {
- case Array(id: String, _: String, sco: String) =>
- (id, sco.toInt)
- }
- //分组group
- val group: Map[String, List[(String, Int)]] = scores.groupBy(word => word._1)
- //统计数量
- val sumScoList: Map[String, Int] = group.map {
- case (id: String, list: List[(String, Int)]) =>
- val sco: List[Int] = list.map { case (_, sco: Int) => sco }
- val sumSco: Int = sco.sum
- (id, sumSco)
- }
- sumScoList.foreach(println)
- }
- }
- 2、统计学生的总分
- package com.shujia.scala
- import scala.io.Source
- object Demo22SumScore {
- def main(args: Array[String]): Unit = {
- /**
- * 2、统计学生的总分
- */
- //1、读取分数表
- val scoresList: List[String] = Source.fromFile("data/score.txt").getLines().toList
- //2、过滤脏数据
- val filterList: List[String] = scoresList.filter((line: String) => {
- val length: Int = line.split(",").length
- length == 3
- })
- //3、取出学号和分数
- val idAndScore: List[(String, Int)] = filterList.map((line => {
- val split: Array[String] = line.split(",")
- //学号
- val id: String = split.head
- //分数
- val score: Int = split.last.toInt
- (id, score)
- }))
- //4、按照学号分组
- val groupByList: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
- //5、统计学生的总分
- val sumScoMap: Map[String, Int] = groupByList.map((kv: (String, List[(String, Int)])) => {
- val id: String = kv._1
- val scores: List[(String, Int)] = kv._2
- //取出每个学生所有的分数
- val scos: List[Int] = scores.map(sco => sco._2)
- //计算总分
- val sumSco: Int = scos.sum
- (id, sumSco)
- })
- sumScoMap.foreach(println)
- }
- }
/*
* 第二种方法,case
*/
- object Demo22SumScore {
def main(args: Array[String]): Unit = {
/**
* 2、统计学生的总分
*/
//1、读取分数表
val scoresList: List[String] = Source.fromFile("data/score.txt").getLines().toList
//2、过滤脏数据
val filterList: List[String] = scoresList.filter((line: String) => {
val length: Int = line.split(",").length
length == 3
})
//3、取出学号和分数
val idAndScore: List[(String, Int)] = filterList.map((line => {
val split: Array[String] = line.split(",")
//学号
val id: String = split.head
//分数
val score: Int = split.last.toInt
(id, score)
}))
//4、按照学号分组
val groupByList: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
//5、统计学生的总分
val sumScoMap: Map[String, Int] = groupByList.map((kv: (String, List[(String, Int)])) => {
val id: String = kv._1
val scores: List[(String, Int)] = kv._2
//取出每个学生所有的分数
val scos: List[Int] = scores.map(sco => sco._2)
//计算总分
val sumSco: Int = scos.sum
(id, sumSco)
})
sumScoMap.foreach(println)
}
}
- 3、统计总分年级排名前十学生各科的分数
- package shujia
- import scala.io.Source
- //1、统计总分年级排名前十学生各科的分数
- object Test3Top10 {
- def main(args: Array[String]): Unit = {
- //1、读取分数
- val lines: List[String] = Source.fromFile("data/score.txt").getLines().toList
- //2、切分数据
- val scoreArr: List[Array[String]] = lines.map(line => line.split(","))
- //3、过滤脏数据
- val scoreFilter: List[Array[String]] = scoreArr.filter(arr => arr.length == 3)
- //scoreFilter.foreach(println)
- //4、取出学号和分数
- val scoFilter: List[(String, String, Int)] = scoreFilter.map {
- case Array(id: String, subject: String, sco: String) =>
- (id, subject, sco.toInt)
- }
- //5.学号分组
- val scoGroupBy: Map[String, List[(String, String, Int)]] = scoFilter.groupBy(kv => kv._1)
- //6.计算学生总分
- val sSos: List[(String, Int, List[(String, String, Int)])] = scoGroupBy.map {
- case (id: String, list: List[(String, String, Int)]) =>
- val scores: List[Int] = list.map { case (_, _, sco: Int) => sco }
- val scoSum: Int = scores.sum
- (id, scoSum, list)
- }.toList
- val lists: List[(String, Int, List[(String, String, Int)])] = sSos.sortBy(kv => -kv._2)
- val top10: List[(String, Int, List[(String, String, Int)])] = lists.take(10)
- top10.foreach(println)
- }
- }
4、统计总分大于年级平均分的学生
- import com.shujia.spark.util.HdfsUtil
- import org.apache.spark.rdd.RDD
- import org.apache.spark.{SparkConf, SparkContext}
- //统计总分大于年级平均分的学生
- //平均总分=学生总分/学生人数
- object Test2ScoreAvg {
- def main(args: Array[String]): Unit = {
- val conf = new SparkConf()
- conf.setAppName("AVG")
- // conf.setMaster("local")
- val sc = new SparkContext(conf)
- //读取文件切分过滤脏数据
- val scoFilter: RDD[Array[String]] = sc.textFile("/data/student/score.txt").map(_.split(",")).filter(_.length == 3)
- //提取分数出来
- val scoRDD: RDD[(String, Int)] = scoFilter.map {
- case Array(id: String, _, sco: String) =>
- (id, sco.toInt)
- }
- //按照学生学号进行分组
- val scoGroRDD: RDD[(String, Iterable[(String, Int)])] = scoRDD.groupBy(_._1)
- //暂存缓存中,提高速率
- scoRDD.cache()
- //计算学生的总分
- val sumStusRDD: RDD[(String, Int)] = scoRDD.reduceByKey(_ + _)
- //计算年级的总分
- val sumNJ: Double = sumStusRDD.map(_._2).sum
- //计算年级的平均总分
- val avgSum: Double = sumNJ / scoGroRDD.count
- //过滤总分大于平均分的数据
- val avgtoSum: RDD[(String, Int)] = sumStusRDD.filter { case (_, sco: Int) => sco >= avgSum }
- val l1: Long = avgtoSum.count()
- println(s"大于平均分有$l1+人,平均分是:$avgSum")
- // avgtoSum.foreach(println)
- HdfsUtil.delete("/data/sum_avgToSum")
- avgtoSum.saveAsTextFile("/data/sum_avgToSum")
- }
- }
5、统计每科都及格的学生
- package shujia
- import scala.collection.immutable
- import scala.io.Source
- //3、统计每科都及格的学生
- object Test5_60fen {
- def main(args: Array[String]): Unit = {
- //读取文件
- val list: List[String] = Source.fromFile("data/score.txt").getLines().toList
- // list.foreach(println)
- //按照逗号分割
- val listSplit: List[Array[String]] = list.map(line => line.split(","))
- // listSplit.foreach(println)
- //过滤数据
- val listFilter: List[Array[String]] = listSplit.filter(line => line.length == 3)
- //提取数据,过滤分数大于60的人
- // listFilter.foreach(println)
- val listFilter2: List[Array[String]] = listFilter.filter(sco => sco.last.toInt - (60) >= 0)
- //listFilter2.foreach(println)
- val lists: List[(String, String, Int)] = listFilter2.map {
- case Array(id: String, sub: String, sco: String) =>
- (id, sub, sco.toInt)
- }
- //按照学号分组
- val listGroup: Map[String, List[(String, String, Int)]] = lists.groupBy(line => line._1)
- val list1: List[(String, List[(String, String, Int)])] = listGroup.map((kv: (String, List[(String, String, Int)])) => {
- val id: String = kv._1
- val count: List[(String, String, Int)] = kv._2
- (id, count)
- }).toList
- list1.foreach(println)
- }
- }
6、统计偏科最严重的前100名学生
- package com.shujia.scala
- import scala.collection.immutable
- import scala.io.Source
- object Demo31Student {
- def main(args: Array[String]): Unit = {
- /**
- * 4、统计偏科最严重的前100名学生
- *
- * 偏科评估的标准: 方差
- */
- //1、读取分数
- val lines: List[String] = Source.fromFile("data/score.txt").getLines().toList
- //2、切分数据
- val scoreArr: List[Array[String]] = lines.map(line => line.split(","))
- //3、过滤脏数据
- val scoreFilter: List[Array[String]] = scoreArr.filter(arr => arr.length == 3)
- //4、取出学号和分数
- val idAndScore: List[(String, Int)] = scoreFilter.map {
- case Array(id: String, _, sco: String) =>
- (id, sco.toInt)
- }
- //5、按照学号分组
- val groupBy: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
- //计算方差
- val std: List[(String, Double, List[(String, Int)])] = groupBy.map {
- case (id: String, list: List[(String, Int)]) =>
- //一个学生所有的分数
- val scores: List[Int] = list.map { case (_, sco: Int) => sco }
- /**
- * 计算方差
- * 1、计算总数
- * 2、计算平均值
- * 3、计算方差
- *
- */
- //科目数
- val N: Double = scores.length.toDouble
- //平均数
- val avg: Double = scores.sum / N
- //计算方差
- val std: Double = scores.map((sco: Int) => (sco - avg) * (sco - avg)).sum / N
- (id, std, list)
- }.toList
- //按照方差排序,取前100
- val sortByStd: List[(String, Double, List[(String, Int)])] = std.sortBy(kv => -kv._2)
- //取前100
- val top10: List[(String, Double, List[(String, Int)])] = sortByStd.take(100)
- top10.foreach(println)
- }
- }
Scala 练习题 学生分数案例的更多相关文章
- 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase学生选课案例
实验目的 复习hbase的shell操作和javaAPI操作 了解javaWeb项目的MVC设计 学会dao(数据库访问对象)和service层的代码编写规范 学会设计hbase表格 实验原理 前面我 ...
- shell脚本,计算学生分数的题目。
1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.
- 借助DBHelper实现学生管理案例分析
一.案例功能的实现 数据: --专业 create table ProfessionInfo ( ProfessionID int primary key identity(1,1), --专业编号 ...
- scala练习题1 基础知识
1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等: 2,在scala REPL中,计算3的平方根,然 ...
- vue实现简单学生信息管理案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- scala练习题--万年历
使用方法去完成 import scala.io.StdIn object work1 { def main(args: Array[String]): Unit = { // 1.先输出提示语句,并 ...
- PHP0011:学生信息管理案例
PHP中 html js 混合用
- 面向对象案例-学生信息管理系统V0.6
更新版本 面向对象案例 - 学生信息管理系统V1.0 项目要求: 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的方法 1. ...
- 面向对象案例-学生信息管理系统V1.1
1.学生类 package com.qfedu.student.entity; /** * 学生类实体 * * @author GGGXXC * */ public class Student { p ...
随机推荐
- 忘带U盘了??别急!一行python代码即可搞定文件传输
近日发现了python一个很有趣的功能,今天在这里给大伙儿做一下分享 需求前提 1.想要拷贝电脑的文件到另一台电脑但是又没有U盘2.手机上想获取到存储在电脑的文件3.忘带U盘- 您也太丢三落四了吧,但 ...
- 干货|带你体验一次原生OpenStack云平台发放云主机的过程
一个执着于技术的公众号 1 前言 上一章节我们完成了OpenStack云平台的搭建工作,今天就带大家一起学习下如何发放一台云主机 点击查看:如何搭建一套OpenStack云平台 2 发放OpenSta ...
- C#/VB.NET 在Excel单元格中应用多种字体格式
在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...
- DOM操作标签、事件绑定、jQuery框架/类库
DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' # 动态创建一个a标签并添加到页面指定 ...
- MYSQL如何比对版本号字符串
MYSQL如何比对版本号字符串 mysql 数据库中存储了一个形如"2.7.6.526" 的版本号,现在要获取出小于某个版本号的数据,怎么做?这个就是昨天遇到的一个问题,记录下查到 ...
- App自动化之dom结构和元素定位方式(包含滑动列表定位)
900×383 38 KB 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互.界面的结构化描述, 常见的格式为h ...
- 安装@parcel/transformer-image注意的问题
安装前配置 npm config get cache 键入以上命令即可找到npm缓存路径,然后找到路径下的_libvips文件夹. 一般需要以下两个文件,这里以win环境为例.把文件放到_libvip ...
- Vue几行代码实现搜索功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- String-StringBuffer-StringBuilder,Comparable-comparator
String 1.String是final类,不可被继承 2.内部是value[]的数组 private final char value[]; 3.不可变字符串 String s1 = " ...
- MySQL根据表前缀批量修改、删除表
注意:请先调试好,以及做好备份,再执行操作. 批量修改表 批量给前缀为 xushanxiang_content_ 的表增加一个 username 的字段: SELECT CONCAT('ALTER T ...