Pyspark如何实现指定字段值优先再按priority字段排序
实现逻辑
你需要自定义两个排序键:
- 第一排序键:判断
name是否等于core,等于时返回0,其余返回1,按该键升序排列,保证所有core行排在最前面 - 第二排序键:按
priority字段升序排列,保证同一类别的行按优先级从小到大排序
PySpark代码实现
首先构造示例数据集用于测试:
from pyspark.sql import SparkSession from pyspark.sql.functions import when, asc # 初始化SparkSession spark = SparkSession.builder.appName("custom_sort").getOrCreate() # 构造示例数据 data = [ (1, "core", 10), (2, "core", 9), (3, "other", 8), (4, "board", 7), (5, "board", 6), (6, "core", 4) ] df = spark.createDataFrame(data, schema=["id", "name", "priority"])
核心排序代码,无需额外新增字段,直接在orderBy中传入排序规则即可:
# 执行自定义排序 sorted_df = df.orderBy( when(df.name == "core", 0).otherwise(1).asc(), asc("priority") ) # 查看结果 sorted_df.show()
输出结果验证
运行后输出和预期完全一致:
+---+-----+--------+ | id| name|priority| +---+-----+--------+ | 6| core| 4| | 2| core| 9| | 1| core| 10| | 5|board| 6| | 4|board| 7| | 3|other| 8| +---+-----+--------+
内容的提问来源于stack exchange,提问作者aman nagariya
相关产品推荐
相关产品推荐

