📅  最后修改于: 2023-12-03 15:04:02.065000             🧑  作者: Mango
当需要对 Spark DataFrame 进行分组操作并按照某一列进行降序排序时,可以使用 PySpark 的 GroupBy 和排序操作。
以下是代码示例:
首先,我们需要创建一个示例 DataFrame:
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder.appName("GroupBy and Sort").getOrCreate()
# 创建一个示例 DataFrame
data = [("Alice", "Maths", 85), ("Bob", "English", 75), ("Charlie", "Science", 90),
("David", "Maths", 84), ("Emma", "Science", 92), ("Frank", "English", 78)]
columns = ["Name", "Subject", "Score"]
df = spark.createDataFrame(data=data, schema=columns)
df.show()
输出结果如下所示:
+-------+-------+-----+
| Name|Subject|Score|
+-------+-------+-----+
| Alice| Maths| 85|
| Bob|English| 75|
|Charlie|Science| 90|
| David| Maths| 84|
| Emma|Science| 92|
| Frank|English| 78|
+-------+-------+-----+
接下来,我们可以使用 groupBy() 方法按照学科对 DataFrame 进行分组,然后使用 agg() 方法计算每个组中的平均分数。最后,使用 orderBy() 方法将其按照平均得分降序排列。
from pyspark.sql.functions import avg
# 使用 groupBy() 按照 Subject 列对 DataFrame 进行分组
grouped_df = df.groupBy("Subject")
# 使用 agg() 计算每个组的平均分数
grouped_df_mean = grouped_df.agg(avg("Score").alias("AvgScore"))
# 使用 orderBy() 按照平均分数降序排列
sorted_df = grouped_df_mean.orderBy("AvgScore", ascending=False)
sorted_df.show()
输出结果如下所示:
+-------+--------+
|Subject|AvgScore|
+-------+--------+
|Science| 91.0|
| Maths| 84.5|
|English| 76.5|
+-------+--------+
我们可以看到,DataFrame 已经按照学科分组,并按照平均分数降序排列。现在,我们已经成功地使用 PySpark 进行了分组和排序操作。