Pyspark读取Hive DataFrame按两列排序出现数据错乱问题
问题原因
你使用的默认df.sort(["id","parameter_name"])方法会对parameter_name字段执行字符串字典序排序,无法匹配你要求的自定义参数顺序,才会出现同id记录拆分、排序结果错乱的问题。
解决方法
通过when函数为每个parameter_name映射自定义排序权重,再按id、权重升序排序即可:
from pyspark.sql.functions import when, col # 映射自定义排序优先级,数值越小排序越靠前 df = df.withColumn( "param_sort_weight", when(col("parameter_name") == "name_en", 1) .when(col("parameter_name") == "name_il", 2) .when(col("parameter_name") == "address_en", 3) .when(col("parameter_name") == "address_il", 4) ) # 执行排序后删除临时权重字段 sorted_df = df.sort("id", "param_sort_weight").drop("param_sort_weight")
结果说明
执行上述代码后,会先按id升序排列,同id下的参数会严格按照name_en→name_il→address_en→address_il的顺序排列,完全匹配需求。
内容的提问来源于stack exchange,提问作者xMustangLovesPie
相关产品推荐
相关产品推荐

