spark 已建好RDD,DataFrame和临时表, rdd df scs直接写 每门课的平均分,按平均分排序
时间: 2024-03-11 22:48:48 浏览: 61
假设你已经有了一个RDD或DataFrame,其中包含每个学生的成绩和所属的课程,那么你可以使用以下代码来计算每门课的平均分并按平均分排序:
使用RDD:
```python
# 假设你的rdd如下所示
# (课程名称, 成绩)
rdd = sc.parallelize([
("Math", 80),
("Math", 90),
("English", 75),
("English", 85),
("Science", 95),
("Science", 85),
])
# 计算每门课的平均分
# (课程名称, (总分数, 总人数))
totals = rdd.mapValues(lambda x: (x, 1)) \
.reduceByKey(lambda x, y: (x[0]+y[0], x[1]+y[1]))
# 计算每门课的平均分并按平均分排序
# (课程名称, 平均分数)
averages = totals.mapValues(lambda x: x[0]/x[1]) \
.sortBy(lambda x: x[1], ascending=False)
# 输出结果
for course, avg in averages.collect():
print(f"{course}: {avg}")
```
使用DataFrame:
```python
# 假设你的DataFrame如下所示
# +--------+-----+
# | course|score|
# +--------+-----+
# | Math| 80|
# | Math| 90|
# | English| 75|
# | English| 85|
# | Science| 95|
# | Science| 85|
# +--------+-----+
from pyspark.sql.functions import avg
# 计算每门课的平均分并按平均分排序
df.groupBy("course").agg(avg("score").alias("average")) \
.orderBy("average", ascending=False) \
.show()
```
使用临时表:
```python
# 假设你已经将DataFrame注册为一个叫做"temp_table"的临时表
spark.sql("""
SELECT course, AVG(score) AS average
FROM temp_table
GROUP BY course
ORDER BY average DESC
""").show()
```
阅读全文