📌  相关文章
📜  如何按多列对 PysPark DataFrame 进行排序?(1)

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

如何按多列对 PysPark DataFrame 进行排序?

在处理大规模数据集时,经常需要按多列对 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 进行排序的介绍。