📅  最后修改于: 2023-12-03 15:04:02.075000             🧑  作者: Mango
在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
列的升序排列。如果要对列进行不同的排序顺序(例如,某些列按升序排序,而其他列按降序排序),可以使用asc
和desc
函数。例如,我们可以按照以下方式对数据框进行排序:
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
函数中传递列名和排序顺序即可。使用asc
和desc
函数可以更具体地控制排序顺序。