📅  最后修改于: 2023-12-03 15:24:47.389000             🧑  作者: Mango
在处理大规模数据集时,经常需要按多列对 DataFrame 进行排序。在 PysPark 中,可以使用 orderBy
函数来实现此操作。
orderBy(*cols, **kwargs)
cols
:要按其进行排序的列(可以是列名、列表或表达式)。ascending
:是否按升序排序(默认为True)。首先,我们创建一个简单的 DataFrame:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Multi-Column Sorting").getOrCreate()
data = [("Alice", "F", 25), ("John", "M", 22), ("Jane", "F", 21), ("David", "M", 29)]
columns = ["name", "gender", "age"]
df = spark.createDataFrame(data, columns)
df.show()
# Output:
# +-----+------+---+
# | name|gender|age|
# +-----+------+---+
# |Alice| F| 25|
# | John| M| 22|
# | Jane| F| 21|
# |David| M| 29|
# +-----+------+---+
要按多个列进行排序,请使用多个列名作为 cols
参数。例如,按性别和年龄排序:
df = df.orderBy("gender", "age")
df.show()
# Output:
# +-----+------+---+
# | name|gender|age|
# +-----+------+---+
# | Jane| F| 21|
# |Alice| F| 25|
# | John| M| 22|
# |David| M| 29|
# +-----+------+---+
如果要为每个列设置不同的排序方向,请使用 asc()
或 desc()
函数。例如,按性别升序、按年龄降序排序:
from pyspark.sql.functions import asc, desc
df = df.orderBy(asc("gender"), desc("age"))
df.show()
# Output:
# +-----+------+---+
# | name|gender|age|
# +-----+------+---+
# | Alice| F| 25|
# | Jane| F| 21|
# |David| M| 29|
# | John| M| 22|
# +-----+------+---+
注意,在排序过程中,PysPark 会对每个列的值进行类型推断。因此,在按多列排序时,请务必确保列的类型正确无误。
以上就是按多列对 PysPark DataFrame 进行排序的介绍。