📅  最后修改于: 2023-12-03 14:45:52.615000             🧑  作者: Mango
在 PySpark 中,要对 DataFrame 进行排序操作可以使用 orderBy()
或者 sort()
函数。两者的作用是相同的,都可以用来对 DataFrame 的列进行升序或降序排列。
orderBy()
函数可以根据指定的列名进行排序,默认情况下按照升序排列。
from pyspark.sql.functions import *
# 创建 DataFrame
data = [("Alice", 25), ("Bob", 20), ("Charlie", 30)]
df = spark.createDataFrame(data, ["Name", "Age"])
# 对 Age 列进行升序排列
df.orderBy("Age").show()
# +-------+---+
# | Name|Age|
# +-------+---+
# | Bob| 20|
# | Alice| 25|
# |Charlie| 30|
# +-------+---+
如果要对多个列进行排序,可以在 orderBy() 函数中指定多个列名,并在每个列名后面指定排序方式。第一列是第一优先级,第二列是第二优先级,以此类推。
# 对 Age 列进行升序排列,相同的 Age 值按 Name 列升序排列
df.orderBy("Age", "Name").show()
# +-------+---+
# | Name|Age|
# +-------+---+
# | Bob| 20|
# | Alice| 25|
# |Charlie| 30|
# +-------+---+
可以使用 desc()
函数对列进行降序排列。
# 对 Age 列进行降序排列
df.orderBy(desc("Age")).show()
# +-------+---+
# | Name|Age|
# +-------+---+
# |Charlie| 30|
# | Alice| 25|
# | Bob| 20|
# +-------+---+
sort()
函数与 orderBy()
函数类似,都是用来对 DataFrame 进行排序操作的函数。但是,sort()
函数比 orderBy()
函数更加灵活,可以根据具体的需求使用不同的排序策略。
首先,可以使用 sort()
函数来对保留在 DataFrame 中的所有行进行排序,并返回结果 DataFrame。
# 根据第一列对 DataFrame 进行升序排列
df.sort("_1").show()
# +-------+---+
# | Name|Age|
# +-------+---+
# | Alice| 25|
# | Bob| 20|
# |Charlie| 30|
# +-------+---+
也可以将两个 DataFrame 进行连接,然后根据指定的列对连接后的 DataFrame 进行排序。
# 创建第二个 DataFrame
data2 = [(20, "M"), (25, "F"), (30, "M")]
df2 = spark.createDataFrame(data2, ["Age", "Gender"])
# 通过 join 操作将两个 DataFrame 进行连接
joined_df = df.join(df2, "Age")
# 根据 Age 列进行升序排列
joined_df.sort("Age").show()
# +---+------+------+
# |Age| Name|Gender|
# +---+------+------+
# | 20| Bob| M|
# | 25| Alice| F|
# | 30|Charlie| M|
# +---+------+------+
还可以根据指定的列对 DataFrame 进行升序或降序排列。
# 根据 Age 列进行升序排列
df.sort(col("Age").asc()).show()
# +-------+---+
# | Name|Age|
# +-------+---+
# | Bob| 20|
# | Alice| 25|
# |Charlie| 30|
# +-------+---+
# 根据 Age 列进行降序排列
df.sort(col("Age").desc()).show()
# +-------+---+
# | Name|Age|
# +-------+---+
# |Charlie| 30|
# | Alice| 25|
# | Bob| 20|
# +-------+---+
总的来说,sort()
函数比 orderBy()
函数更加灵活,具有更多的操作选项。但是,在使用 sort()
函数时需要额外注意指定排序策略。