08 学生课程分数的Spark SQL分析

读学生课程分数文件chapter4-data01.txt,创建DataFrame。

 

 

 

用DataFrame的操作或SQL语句完成以下数据分析要求,并和用RDD操作的实现进行对比:

  • 每个分数+5分。
  •  

     

  • 总共有多少学生?
  •  

     

  • 总共开设了哪些课程?
  •  

     

  • 每个学生选修了多少门课?
  •  

     

  • 每门课程有多少个学生选?
  •  

     

  • 每门课程大于95分的学生人数?
  •  

     

  • Tom选修了几门课?每门课多少分?
  •  

     

  • Tom的成绩按分数大小排序。
  •  

     

  • Tom的平均分。
  •  

     

  • 求每门课的平均分,最高分,最低分。
  •  

     

  •  

     

  •  

     

  • 求每门课的选修人数及平均分,精确到2位小数。
  • 每门课的不及格人数,通过率
  •  

     

二.用SQL语句完成以上数据分析要求 

1.每个分数+5分

spark.sql("SELECT name,course,score+5 from scs").show()

 

 

2.总共有多少学生?

spark.sql("SELECT count(name) from scs").show()

3.总共开设了哪些课程?

spark.sql("SELECT distinct(course) from scs").show()

 

 

4.每个学生选修了多少门课?

spark.sql("SELECT name,count(course) from scs group by name").show()

 

 

5.每门课程有多少个学生选?

spark.sql("SELECT count(name),course from scs group by course").show()

6.每门课程大于95分的学生人数?

spark.sql("SELECT count(name),course from scs where score>95 group by course").show()

 

 

7.Tom选修了几门课?每门课多少分?

spark.sql("SELECT count(course) from scs where name='Tom'").show()

spark.sql("SELECT course,score from scs where name='Tom'").show()

 

 

 

 Tom的成绩按分数大小排序。

   Tom的平均分

spark.sql("SELECT course,score from scs where name='Tom' order by score desc").show()

spark.sql("SELECT avg(score) from scs where name='Tom'").show()

 

 

 

10.求每门课的平均分,最高分,最低分。

spark.sql("SELECT course,avg(score),max(score),min(score) from scs group by course").show()

 

 

11.求每门课的选修人数及平均分,精确到2位小数。

spark.sql("SELECT course,count(course),round(avg(score),2) from scs group by course").show()

 

 

12.每门课的不及格人数,通过率

spark.sql('SELECT course, count(name) as n, avg(score) as avg FROM scs group by course').createOrReplaceTempView("a")

spark.sql('SELECT course, count(score) as notPass FROM scs WHERE score<60 group by course').createOrReplaceTempView("b")

spark.sql('SELECT * FROM a left join b on a.course=b.course').show()

spark.sql('SELECT a.course, round(a.avg, 2), b.notPass, round((a.n-b.notPass)/a.n, 2) as passRat FROM a left join b on a.course=b.course').show()

 

 

 

 

posted @ 2021-05-20 15:56  牛逼赛亚人  阅读(65)  评论(0编辑  收藏  举报