📌  相关文章
📜  PySpark – 按多列对数据框进行排序(1)

📅  最后修改于: 2023-12-03 15:04:02.075000             🧑  作者: Mango

PySpark – 按多列对数据框进行排序

在PySpark中,我们可以使用orderBy函数对数据框按单列进行排序。但是如果要按多列排序,则需要使用orderBy函数的参数,指定列名和排序顺序。本文将介绍如何在PySpark中按多列对数据框进行排序。

首先,让我们定义一个简单的数据框:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Multi-column Sorting").getOrCreate()

data = [("Alice", 35, "Female"), ("Bob", 25, "Male"), ("Charlie", 30, "Male"), ("Alice", 25, "Male"), ("Bob", 30, "Male")]
df = spark.createDataFrame(data, ["name", "age", "gender"])
df.show()

输出:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|  Alice| 35|Female|
|    Bob| 25|  Male|
|Charlie| 30|  Male|
|  Alice| 25|  Male|
|    Bob| 30|  Male|
+-------+---+------+

现在,我们将按照name列和age列的升序排列数据框。可以通过在orderBy函数中传递列名和排序顺序来实现:

from pyspark.sql.functions import asc

df = df.orderBy(asc("name"), asc("age"))
df.show()

输出:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|  Alice| 25|  Male|
|  Alice| 35|Female|
|    Bob| 25|  Male|
|    Bob| 30|  Male|
|Charlie| 30|  Male|
+-------+---+------+

可以看到,数据框已按照name列和age列的升序排列。如果要对列进行不同的排序顺序(例如,某些列按升序排序,而其他列按降序排序),可以使用ascdesc函数。例如,我们可以按照以下方式对数据框进行排序:

from pyspark.sql.functions import desc

df = df.orderBy(asc("name"), desc("age"))
df.show()

输出:

+-------+---+------+
|   name|age|gender|
+-------+---+------+
|  Alice| 35|Female|
|  Alice| 25|  Male|
|    Bob| 30|  Male|
|    Bob| 25|  Male|
|Charlie| 30|  Male|
+-------+---+------+

现在,数据框已按照name列的升序和age列的降序排列。

总之,按多列对数据框进行排序很容易,只需在orderBy函数中传递列名和排序顺序即可。使用ascdesc函数可以更具体地控制排序顺序。