1. 一、相关信息
    题目:
    1、统计班级人数
    2、统计学生的总分
    3、统计总分年级排名前十学生各科的分数
    4、统计总分大于年级平均分的学生
    5、统计每科都及格的学生
    6、统计偏科最严重的前100名学生
    数据样例(部分数据):
    1.学生信息数据:students.txt
  1. 1500100001,施笑槐,22,女,文科六班
  2. 1500100002,吕金鹏,24,男,文科七班
  3. 1500100003,单乐蕊,22,女,理科六班
  4. 1500100004,葛德曜,24,男,理科三班
  5. 1500100005,宣谷芹,22,女,理科五班
  6. 1500100006,边昂雄,21,男,理科二班
  7. 1500100007,尚孤风,23,女,文科六班
  8. 1500100008,符半双,22,女,理科六班
  9. 1500100009,沈德昌,21,男,理科一班
  10. 1500100010,羿彦昌,23,男,理科六班
  11. 1500100011,宰运华,21,男,理科三班
  12. 1500100012,梁易槐,21,女,理科一班
  13. 1500100013,逯君昊,24,男,文科二班
  14. 1500100014,羿旭炎,23,男,理科五班
  15. 1500100015,宦怀绿,21,女,理科一班
  16. 1500100016,潘访烟,23,女,文科一班
  1. 2.学生分数信息(部分):
  1. 500100001,1000001,98
  2. 1500100001,1000002,5
  3. 1500100001,1000003,0
  4. 1500100001,1000004,29
  5. 1500100001,1000005,85
  6. 1500100001,1000006,52
  7. 1500100002,1000001,139
  8. 1500100002,1000002,102
  9. 1500100002,1000003,44
  10. 1500100002,1000004,18
  11. 1500100002,1000005,46
  12. 1500100002,1000006,91
  13. 1500100003,1000001,48
  1. 3.学生科目信息(部分):
  1. 1000001,语文,150
  2. 1000002,数学,150
  3. 1000003,英语,150
  4. 1000004,政治,100
  5. 1000005,历史,100
  6. 1000006,物理,100
  7. 1000007,化学,100
  8. 1000008,地理,100
  9. 1000009,生物,100
 
  1. 二、题目代码编写

    1、统计班级人数
  1. package shujia
  2.  
  3. import scala.io.Source
  4. //1、统计班级人数
  5. /**
  6. * 以下所有的方法都是返回新的集合,不会修改原始的集合
  7. * 同时以下这些方法在set集合中也有,除了sort
  8. * foreach:遍历数据
  9. * map:一条一条处理数据
  10. * filter:过滤数据
  11. * flatMap:将一行转换成多行
  12. * sortBy:排序
  13. * groupBy:分组
  14. */
  15. object Test2 {
  16. def main(args: Array[String]): Unit = {
  17. //读取文件
  18. val students: List[String] = Source.fromFile("data/score.txt").getLines().toList
  19. //按照逗号分割
  20.  
  21. val stringses: List[Array[String]] = students.map(line => line.split(","))
  22.  
  23. //3.过滤脏数据
  24. val listFilter: List[Array[String]] = stringses.filter(line => line.length == 3)
  25.  
  26. //4.取数据
  27. val scores: List[(String, Int)] = listFilter.map {
  28. case Array(id: String, _: String, sco: String) =>
  29. (id, sco.toInt)
  30. }
  31. //分组group
  32. val group: Map[String, List[(String, Int)]] = scores.groupBy(word => word._1)
  33. //统计数量
  34.  
  35. val sumScoList: Map[String, Int] = group.map {
  36. case (id: String, list: List[(String, Int)]) =>
  37. val sco: List[Int] = list.map { case (_, sco: Int) => sco }
  38. val sumSco: Int = sco.sum
  39. (id, sumSco)
  40. }
  41. sumScoList.foreach(println)
  42. }
  43. }
  1. 2、统计学生的总分
  1. package com.shujia.scala
  2.  
  3. import scala.io.Source
  4.  
  5. object Demo22SumScore {
  6. def main(args: Array[String]): Unit = {
  7. /**
  8. * 2、统计学生的总分
  9. */
  10.  
  11. //1、读取分数表
  12. val scoresList: List[String] = Source.fromFile("data/score.txt").getLines().toList
  13.  
  14. //2、过滤脏数据
  15. val filterList: List[String] = scoresList.filter((line: String) => {
  16. val length: Int = line.split(",").length
  17. length == 3
  18. })
  19.  
  20. //3、取出学号和分数
  21. val idAndScore: List[(String, Int)] = filterList.map((line => {
  22. val split: Array[String] = line.split(",")
  23. //学号
  24. val id: String = split.head
  25. //分数
  26. val score: Int = split.last.toInt
  27. (id, score)
  28. }))
  29.  
  30. //4、按照学号分组
  31. val groupByList: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
  32.  
  33. //5、统计学生的总分
  34. val sumScoMap: Map[String, Int] = groupByList.map((kv: (String, List[(String, Int)])) => {
  35. val id: String = kv._1
  36. val scores: List[(String, Int)] = kv._2
  37. //取出每个学生所有的分数
  38. val scos: List[Int] = scores.map(sco => sco._2)
  39. //计算总分
  40. val sumSco: Int = scos.sum
  41.  
  42. (id, sumSco)
  43. })
  44.  
  45. sumScoMap.foreach(println)
  46. }
  47.  
  48. }
    /*
    * 第二种方法,case
    */
  1. 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)
    }

    }
  1.  
  1. 3、统计总分年级排名前十学生各科的分数
  1. package shujia
  2.  
  3. import scala.io.Source
  4.  
  5. //1、统计总分年级排名前十学生各科的分数
  6. object Test3Top10 {
  7. def main(args: Array[String]): Unit = {
  8.  
  9. //1、读取分数
  10. val lines: List[String] = Source.fromFile("data/score.txt").getLines().toList
  11.  
  12. //2、切分数据
  13. val scoreArr: List[Array[String]] = lines.map(line => line.split(","))
  14.  
  15. //3、过滤脏数据
  16. val scoreFilter: List[Array[String]] = scoreArr.filter(arr => arr.length == 3)
  17. //scoreFilter.foreach(println)
  18. //4、取出学号和分数
  19. val scoFilter: List[(String, String, Int)] = scoreFilter.map {
  20. case Array(id: String, subject: String, sco: String) =>
  21. (id, subject, sco.toInt)
  22. }
  23. //5.学号分组
  24. val scoGroupBy: Map[String, List[(String, String, Int)]] = scoFilter.groupBy(kv => kv._1)
  25.  
  26. //6.计算学生总分
  27. val sSos: List[(String, Int, List[(String, String, Int)])] = scoGroupBy.map {
  28. case (id: String, list: List[(String, String, Int)]) =>
  29. val scores: List[Int] = list.map { case (_, _, sco: Int) => sco }
  30.  
  31. val scoSum: Int = scores.sum
  32. (id, scoSum, list)
  33. }.toList
  34. val lists: List[(String, Int, List[(String, String, Int)])] = sSos.sortBy(kv => -kv._2)
  35. val top10: List[(String, Int, List[(String, String, Int)])] = lists.take(10)
  36. top10.foreach(println)
  37. }
  38. }

  1. 4、统计总分大于年级平均分的学生
  1. import com.shujia.spark.util.HdfsUtil
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.{SparkConf, SparkContext}
  4.  
  5. //统计总分大于年级平均分的学生
  6. //平均总分=学生总分/学生人数
  7. object Test2ScoreAvg {
  8. def main(args: Array[String]): Unit = {
  9. val conf = new SparkConf()
  10. conf.setAppName("AVG")
  11. // conf.setMaster("local")
  12. val sc = new SparkContext(conf)
  13.  
  14. //读取文件切分过滤脏数据
  15. val scoFilter: RDD[Array[String]] = sc.textFile("/data/student/score.txt").map(_.split(",")).filter(_.length == 3)
  16. //提取分数出来
  17. val scoRDD: RDD[(String, Int)] = scoFilter.map {
  18. case Array(id: String, _, sco: String) =>
  19. (id, sco.toInt)
  20. }
  21. //按照学生学号进行分组
  22. val scoGroRDD: RDD[(String, Iterable[(String, Int)])] = scoRDD.groupBy(_._1)
  23. //暂存缓存中,提高速率
  24. scoRDD.cache()
  25. //计算学生的总分
  26. val sumStusRDD: RDD[(String, Int)] = scoRDD.reduceByKey(_ + _)
  27. //计算年级的总分
  28. val sumNJ: Double = sumStusRDD.map(_._2).sum
  29. //计算年级的平均总分
  30. val avgSum: Double = sumNJ / scoGroRDD.count
  31. //过滤总分大于平均分的数据
  32. val avgtoSum: RDD[(String, Int)] = sumStusRDD.filter { case (_, sco: Int) => sco >= avgSum }
  33. val l1: Long = avgtoSum.count()
  34. println(s"大于平均分有$l1+人,平均分是:$avgSum")
  35. // avgtoSum.foreach(println)
  36. HdfsUtil.delete("/data/sum_avgToSum")
  37. avgtoSum.saveAsTextFile("/data/sum_avgToSum")
  38. }
  39.  
  40. }


  1. 5、统计每科都及格的学生
  1. package shujia
  2.  
  3. import scala.collection.immutable
  4. import scala.io.Source
  5.  
  6. //3、统计每科都及格的学生
  7. object Test5_60fen {
  8. def main(args: Array[String]): Unit = {
  9. //读取文件
  10. val list: List[String] = Source.fromFile("data/score.txt").getLines().toList
  11. // list.foreach(println)
  12. //按照逗号分割
  13. val listSplit: List[Array[String]] = list.map(line => line.split(","))
  14. // listSplit.foreach(println)
  15. //过滤数据
  16. val listFilter: List[Array[String]] = listSplit.filter(line => line.length == 3)
  17. //提取数据,过滤分数大于60的人
  18. // listFilter.foreach(println)
  19. val listFilter2: List[Array[String]] = listFilter.filter(sco => sco.last.toInt - (60) >= 0)
  20. //listFilter2.foreach(println)
  21. val lists: List[(String, String, Int)] = listFilter2.map {
  22. case Array(id: String, sub: String, sco: String) =>
  23. (id, sub, sco.toInt)
  24. }
  25. //按照学号分组
  26. val listGroup: Map[String, List[(String, String, Int)]] = lists.groupBy(line => line._1)
  27.  
  28. val list1: List[(String, List[(String, String, Int)])] = listGroup.map((kv: (String, List[(String, String, Int)])) => {
  29. val id: String = kv._1
  30. val count: List[(String, String, Int)] = kv._2
  31.  
  32. (id, count)
  33. }).toList
  34.  
  35. list1.foreach(println)
  36. }
  37. }

  1. 6、统计偏科最严重的前100名学生
  1. package com.shujia.scala
  2.  
  3. import scala.collection.immutable
  4. import scala.io.Source
  5.  
  6. object Demo31Student {
  7. def main(args: Array[String]): Unit = {
  8. /**
  9. * 4、统计偏科最严重的前100名学生
  10. *
  11. * 偏科评估的标准: 方差
  12. */
  13.  
  14. //1、读取分数
  15. val lines: List[String] = Source.fromFile("data/score.txt").getLines().toList
  16.  
  17. //2、切分数据
  18. val scoreArr: List[Array[String]] = lines.map(line => line.split(","))
  19.  
  20. //3、过滤脏数据
  21. val scoreFilter: List[Array[String]] = scoreArr.filter(arr => arr.length == 3)
  22.  
  23. //4、取出学号和分数
  24. val idAndScore: List[(String, Int)] = scoreFilter.map {
  25. case Array(id: String, _, sco: String) =>
  26. (id, sco.toInt)
  27. }
  28.  
  29. //5、按照学号分组
  30. val groupBy: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
  31.  
  32. //计算方差
  33. val std: List[(String, Double, List[(String, Int)])] = groupBy.map {
  34. case (id: String, list: List[(String, Int)]) =>
  35. //一个学生所有的分数
  36. val scores: List[Int] = list.map { case (_, sco: Int) => sco }
  37.  
  38. /**
  39. * 计算方差
  40. * 1、计算总数
  41. * 2、计算平均值
  42. * 3、计算方差
  43. *
  44. */
  45. //科目数
  46. val N: Double = scores.length.toDouble
  47. //平均数
  48. val avg: Double = scores.sum / N
  49.  
  50. //计算方差
  51. val std: Double = scores.map((sco: Int) => (sco - avg) * (sco - avg)).sum / N
  52.  
  53. (id, std, list)
  54. }.toList
  55.  
  56. //按照方差排序,取前100
  57. val sortByStd: List[(String, Double, List[(String, Int)])] = std.sortBy(kv => -kv._2)
  58.  
  59. //取前100
  60. val top10: List[(String, Double, List[(String, Int)])] = sortByStd.take(100)
  61.  
  62. top10.foreach(println)
  63. }
  64.  
  65. }

Scala 练习题 学生分数案例的更多相关文章

  1. 吴裕雄--天生自然HADOOP操作实验学习笔记:hbase学生选课案例

    实验目的 复习hbase的shell操作和javaAPI操作 了解javaWeb项目的MVC设计 学会dao(数据库访问对象)和service层的代码编写规范 学会设计hbase表格 实验原理 前面我 ...

  2. shell脚本,计算学生分数的题目。

    1.计算学生平均分数的值是多少? 2.计算每门课都大于80分的学生姓名.3.计算每门课都小于90分的学生姓名.

  3. 借助DBHelper实现学生管理案例分析

    一.案例功能的实现 数据: --专业 create table ProfessionInfo ( ProfessionID int primary key identity(1,1), --专业编号 ...

  4. scala练习题1 基础知识

    1, 在scala REPL中输入3. 然后按下tab键,有哪些方法可以被调用? 24个方法可以被调用, 8个基本类型: 基本的操作符, 等:     2,在scala REPL中,计算3的平方根,然 ...

  5. vue实现简单学生信息管理案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. scala练习题--万年历

     使用方法去完成 import scala.io.StdIn object work1 { def main(args: Array[String]): Unit = { // 1.先输出提示语句,并 ...

  7. PHP0011:学生信息管理案例

    PHP中 html js 混合用

  8. 面向对象案例-学生信息管理系统V0.6

    更新版本 面向对象案例 - 学生信息管理系统V1.0 项目要求: 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的方法 1. ...

  9. 面向对象案例-学生信息管理系统V1.1

    1.学生类 package com.qfedu.student.entity; /** * 学生类实体 * * @author GGGXXC * */ public class Student { p ...

随机推荐

  1. 忘带U盘了??别急!一行python代码即可搞定文件传输

    近日发现了python一个很有趣的功能,今天在这里给大伙儿做一下分享 需求前提 1.想要拷贝电脑的文件到另一台电脑但是又没有U盘2.手机上想获取到存储在电脑的文件3.忘带U盘- 您也太丢三落四了吧,但 ...

  2. 干货|带你体验一次原生OpenStack云平台发放云主机的过程

    一个执着于技术的公众号 1 前言 上一章节我们完成了OpenStack云平台的搭建工作,今天就带大家一起学习下如何发放一台云主机 点击查看:如何搭建一套OpenStack云平台 2 发放OpenSta ...

  3. C#/VB.NET 在Excel单元格中应用多种字体格式

    在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...

  4. DOM操作标签、事件绑定、jQuery框架/类库

    DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' # 动态创建一个a标签并添加到页面指定 ...

  5. MYSQL如何比对版本号字符串

    MYSQL如何比对版本号字符串 mysql 数据库中存储了一个形如"2.7.6.526" 的版本号,现在要获取出小于某个版本号的数据,怎么做?这个就是昨天遇到的一个问题,记录下查到 ...

  6. App自动化之dom结构和元素定位方式(包含滑动列表定位)

    900×383 38 KB 先来看几个名词和解释: dom: Document Object Model 文档对象模型 dom应用: 最早应用于html和js的交互.界面的结构化描述, 常见的格式为h ...

  7. 安装@parcel/transformer-image注意的问题

    安装前配置 npm config get cache 键入以上命令即可找到npm缓存路径,然后找到路径下的_libvips文件夹. 一般需要以下两个文件,这里以win环境为例.把文件放到_libvip ...

  8. Vue几行代码实现搜索功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. String-StringBuffer-StringBuilder,Comparable-comparator

    String 1.String是final类,不可被继承 2.内部是value[]的数组 private final char value[]; 3.不可变字符串 String s1 = " ...

  10. MySQL根据表前缀批量修改、删除表

    注意:请先调试好,以及做好备份,再执行操作. 批量修改表 批量给前缀为 xushanxiang_content_ 的表增加一个 username 的字段: SELECT CONCAT('ALTER T ...