SparkSQL練習:對學生選課成績進行分析計算

你这过氧化氢掺水了發表於2024-09-10

題目內容:
對學生選課成績進行分析計算


題目要求:
(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()
}

相關文章