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

posted @ 2022-06-07 20:47  一晚上两本寒假作业  阅读(56)  评论(0编辑  收藏  举报