8. SparkSQL综合作业
## 综合练习:学生课程分数
网盘下载sc.txt文件,创建RDD,并转换得到DataFrame。
分别用**RDD操作**、**DataFrame操作**和**spark.sql执行SQL语句**实现以下数据分析:
## 预处理
(1)RDD:生成RDD
```shell
sc_stu = sc.textFile("file:///usr/local/spark/sc.txt").map(lambda line:line.split(',')).map(lambda line:[line[0],line[1],int(line[2])])
```
(2)DataFrame:创建RDD,并转换得到DataFrame。
```shell
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql.functions import col
from pyspark.sql.functions import count
fields = [
StructField('name', StringType(), True),
StructField('course', StringType(), True),
StructField('score', IntegerType(), True)]
schema = StructType(fields)
lines = sc.textFile("file:///usr/local/spark/sc.txt").map(lambda x:x.split(','))
data = lines.map(lambda p:Row(p[0], p[1], int(p[2])))
df = spark.createDataFrame(data, schema)
```
(3)spark.sql:创建临时表
```shell
from pyspark.sql import Row
student = spark.sparkContext.textFile("file:///usr/local/spark/sc.txt").map(lambda line:line.split(",")).map(lambda p:Row(name=p[0], course=p[1], score=p[2]))
schemaStudent = spark.createDataFrame(student)
schemaStudent.createOrReplaceTempView("student")
```
## 1. 总共有多少学生?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 2. 开设了多少门课程?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 3. 每个学生选修了多少门课?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 4. 每门课程有多少个学生选?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 5. 每门课程>95分的学生人数
(1) RDD:
(2) DataFrame
(3) spark.sql
## 6. 课程'Python'有多少个100分?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 7. Tom选修了几门课?每门课多少分?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 8. Tom的成绩按分数大小排序。
(1) RDD:
(2) DataFrame
(3) spark.sql
## 9. Tom的平均分。
(1) RDD:
(2) DataFrame
(3) spark.sql
## 10. 'OperatingSystem'不及格人数
(1) RDD:
(2) DataFrame
(3) spark.sql
## 11. 'OperatingSystem'平均分
(1) RDD:
(2) DataFrame
(3) spark.sql
## 12. 'OperatingSystem'90分以上人数
(1) RDD:
(2) DataFrame
(3) spark.sql
## 13. 'OperatingSystem'前3名
(1) RDD:
(2) DataFrame
(3) spark.sql
## 14. 每个分数按比例+20平时分。
(1) RDD:
(2) DataFrame
(3) spark.sql
## 15. 求每门课的平均分
(1) RDD:
(2) DataFrame
(3) spark.sql
## 16. 选修了7门课的有多少个学生?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 17. 每门课大于95分的学生数
(1) RDD:
(2) DataFrame
(3) spark.sql
## 18. 每门课的选修人数、平均分、不及格人数、通过率
(1) RDD:
通过率:
(2) DataFrame
(3) spark.sql
## 19. 优秀、良好、通过和不合格各有多少人?
(1) RDD:
(2) DataFrame
(3) spark.sql
## 20. 同时选修了DataStructure和 DataBase 的学生
(1) RDD:
(2) DataFrame
(3) spark.sql
## 21. 选修了DataStructure 但没有选修 DataBase 的学生
(1) RDD:
(2) DataFrame
(3) spark.sql
## 22. 选修课程数少于3门的同学
(1) RDD:
(2) DataFrame
(3) spark.sql
## 23. 选修6门及以上课程数的同学
(1) RDD:
(2) DataFrame
(3) spark.sql
## 24. 查询平均成绩大于等于60分的姓名和平均成绩
(1) RDD:
(2) DataFrame
(3) spark.sql
## 25. 找出平均分最高的10位同学
(1) RDD:
(2) DataFrame
(3) spark.sql
## 26. 求每门课的最高分最低分
(1) RDD:
(2) DataFrame
(3) spark.sql