📜  如何按列列表订购 Pyspark 数据框?(1)

📅  最后修改于: 2023-12-03 14:53:07.263000             🧑  作者: Mango

如何按列列表订购 PySpark 数据框?

在 PySpark 中,我们可以通过 orderBy() 函数来按照一个或多个列对数据框进行排序。在本文中,我们将讨论如何使用列列表来订购 PySpark 数据框。

语法

以下是 orderBy() 函数的语法:

orderBy(*cols, **kwargs)

其中:

  • cols:列名或列表,用于按升序排序,可以用 - 表示降序。
  • **kwargs:额外的参数,例如 nulls_last=True 表示将 NULL 值放到排序的结果集的末尾。
示例

假设我们有一个 PySpark 数据框 df,其中包含三列 nameagecity

from pyspark.sql.functions import col

data = [("Alice", 25, "New York"),
        ("Bob", 30, "London"),
        ("Charlie", 35, "Paris")]

df = spark.createDataFrame(data, ["name", "age", "city"])

我们可以按照以下方式对 df 进行排序:

  • 按照 name 升序排序:df.orderBy("name")df.orderBy(col("name"))
  • 按照 name 降序排序:df.orderBy(-col("name"))df.orderBy(col("name").desc())
  • 按照 agecity 进行复合排序:df.orderBy(col("age"), col("city"))
使用列列表

如果我们想要按照多个列进行排序,可以使用列列表。例如,如果我们想要按照 name 升序和 age 降序进行排序,可以使用以下代码:

df.orderBy([col("name"), col("age").desc()])

如果我们需要在一些列上使用复杂的表达式,例如加减操作、字符串拼接等,我们可以使用 expr() 函数来创建一个表达式。例如,如果我们想要按照 (age + 10) 实现升序排序和 concat(city, name) 实现降序排序,可以使用以下代码:

from pyspark.sql.functions import concat, lit

df.orderBy([col("age") + lit(10), concat(col("city"), col("name")).desc()])
总结

通过本文,我们学习了如何使用列列表按照多个列对 PySpark 数据框进行排序。我们还介绍了一些使用 expr() 函数创建复杂表达式的例子。