SparkSQL练习:对学生选课成绩进行分析计算
题目内容:
对学生选课成绩进行分析计算
题目要求:
(1)该系总共有多少学生;
(2)该系共开设来多少门课程;
(3)每个学生的总成绩多少;
(4)每门课程选修的同学人数;
(5)每位同学选修的课程门数;
(6)该系DataBase课程共有多少人选修;
(7)每位同学平均成绩;
数据预览:
每行数据包括以下三部分内容:学生姓名,所学课程,成绩
每项数据以“,”分隔开
代码实现:
def main(args: Array[String]): Unit = {
val sparConf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(sparConf) //建立Spark连接
val spark = SparkSession.builder().getOrCreate()
val df = spark.read.option("header", "true").csv("E:\\ShuJu\\sparkinput\\batch_test_score\\Data01.csv") //读入文件
df.show()
println("(1)该系总共有多少学生")
val StudentNum = df.groupBy("name").count().collect().length
println(StudentNum)
println("(2)该系共开设来多少门课程")
val CourseNum = df.groupBy("course").count().collect().length
println(CourseNum)
println("(3)每个学生的总成绩多少")
df.select("name", "grade").groupBy("name").agg(sum("grade")).show()
println("(4)每门课程选修的同学人数")
df.groupBy("course").count().show()
println("(5)每位同学选修的课程门数")
df.select("name", "course").groupBy("name").count().show()
println("(6)该系DataBase课程共有多少人选修")
df.select("name", "course").groupBy("course").count().filter("course = 'DataBase'").show()
println("(7)每位同学平均成绩")
val grades = df.groupBy("name").agg(sum("grade").alias("总成绩"), count("course").alias("科目数量"))
val avgGrade = grades.withColumn("平均成绩", grades("总成绩") / grades("科目数量"))
avgGrade.select(avgGrade("name"), round(avgGrade("平均成绩"), 2).alias("平均成绩")).show()
sc.stop()
}