📅  最后修改于: 2023-12-03 14:53:07.263000             🧑  作者: Mango
在 PySpark 中,我们可以通过 orderBy()
函数来按照一个或多个列对数据框进行排序。在本文中,我们将讨论如何使用列列表来订购 PySpark 数据框。
以下是 orderBy()
函数的语法:
orderBy(*cols, **kwargs)
其中:
cols
:列名或列表,用于按升序排序,可以用 -
表示降序。**kwargs
:额外的参数,例如 nulls_last=True
表示将 NULL
值放到排序的结果集的末尾。假设我们有一个 PySpark 数据框 df
,其中包含三列 name
、age
和 city
:
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())
age
和 city
进行复合排序: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()
函数创建复杂表达式的例子。