10道Spark DataFrame程序设计题及Python答案解析

本篇博客精选了10道关于Spark DataFrame的程序设计题,并附带详细的Python答案解析,旨在帮助你巩固DataFrame的常用操作,如分组聚合、排序、过滤、窗口函数等。

准备工作

假设你已经安装好了Spark环境,并创建了一个SparkSession对象:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('Spark DataFrame Exercises').getOrCreate()

数据集

所有题目都基于以下学生信息数据集:

| 姓名 | 班级 | 成绩 | |---|---|---| | 张三 | 一班 | 80 | | 李四 | 一班 | 75 | | 王五 | 一班 | 90 | | 赵六 | 二班 | 85 | | 孙七 | 二班 | 95 | | 周八 | 二班 | 70 |

你可以使用以下代码创建DataFrame:

data = [('张三', '一班', 80), ('李四', '一班', 75), ('王五', '一班', 90), 
        ('赵六', '二班', 85), ('孙七', '二班', 95), ('周八', '二班', 70)]
df = spark.createDataFrame(data, ['name', 'class', 'score'])

题目及答案

1. 计算每个班级的平均分数。

from pyspark.sql.functions import avg

df.groupBy('class').agg(avg('score')).show()

2. 将成绩大于80分的学生的姓名和成绩输出到一个新的DataFrame中。

df.filter(df.score > 80).select('name', 'score').show()

3. 将成绩按照降序排列并输出前10个学生的姓名和成绩。

df.orderBy(df.score.desc()).select('name', 'score').limit(10).show()

4. 将每个学生的成绩加上10分并输出到一个新的DataFrame中。

df.withColumn('new_score', df.score + 10).select('name', 'new_score').show()

5. 计算每个班级的平均分数并按照升序排列输出。

from pyspark.sql.functions import asc

df.groupBy('class').agg(avg('score')).orderBy(asc('avg(score)')).show()

6. 将每个班级的成绩按照降序排列并输出前5个学生的姓名和成绩。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy('class').orderBy(df.score.desc())
df.select('name', 'score', 'class', row_number().over(window).alias('rank')).filter('rank <= 5').show()

7. 将每个班级的成绩按照升序排列并输出前5个学生的姓名和成绩。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy('class').orderBy(df.score.asc())
df.select('name', 'score', 'class', row_number().over(window).alias('rank')).filter('rank <= 5').show()

8. 将每个班级的成绩按照降序排列并输出排名第2到第5的学生的姓名和成绩。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy('class').orderBy(df.score.desc())
df.select('name', 'score', 'class', row_number().over(window).alias('rank')).filter('rank >= 2 and rank <= 5').show()

9. 将每个班级的成绩按照升序排列并输出排名第2到第5的学生的姓名和成绩。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy('class').orderBy(df.score.asc())
df.select('name', 'score', 'class', row_number().over(window).alias('rank')).filter('rank >= 2 and rank <= 5').show()

10. 将每个班级的成绩按照降序排列并输出排名第1到第3的学生的姓名和成绩。

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

window = Window.partitionBy('class').orderBy(df.score.desc())
df.select('name', 'score', 'class', row_number().over(window).alias('rank')).filter('rank >= 1 and rank <= 3').show()
10道Spark DataFrame程序设计题及Python答案解析

原文地址: https://www.cveoy.top/t/topic/jnsS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录