Spark & Scala scala编程案例:统计学生成绩

    科技2022-07-15  272

    Scala 统计学生成绩

    题干

    学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号、性别、课程名 1、课程名 2 等,后面每一行代表一个学生的信息,各字段之间用空白符隔开

    Id gender Math English Physics

    301610 male 80 64 78

    301611 female 65 87 58

    给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函 数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩;另外还需按男女同学分开, 分别统计各门课程的平均成绩,最低成绩,和最高成绩。

    源代码(命令台交互式)

    import scala.io.Source val inputfile=Source.fromFile("/home/beyond-dhl/Desktop/dhl/grade1.txt") val lines = inputfile.getLines val Data = lines.map{_.split(" ")} val header = originalData.head val courseNames = header.drop(2) val allStudents = originalData.tail val stuNum = allStudents.length val (maleLines,femaleLines) = allStudents partition {_(1)=="male"} val courseNum = courseNames.length for(i <- 2 to courseNum+1){ | val temp = allStudents map {elem => elem(i).toDouble}; | println("for xun huan jie guo:temp,avg,max,min"); | println(temp.sum/stuNum,temp.min,temp.max)} val result = | (for (i <-2 to courseNum+1) yield { | val temp1 = allStudents map { elem => elem(i).toDouble};(temp1.sum/stuNum, temp1.min, temp1.max) | }) for(i <- 0 to courseNum-1){ | println(courseNames(i));println("avg,min,max:");println(result(i))}

    相应结果

    Processed: 0.016, SQL: 8