在PySpark中如何比较两列,值不同时选择指定列的实现方法
PySpark 两列比较取值实现方案
你当前编写的代码存在两个问题:
- 没有补全
when的otherwise分支,逻辑不完整 - 错误使用了
F.lit()方法,会返回固定字符串而非rename_description列的实际值
符合需求的代码实现
如果你需要比较type_description和rename_description两列,不一致时取rename_description列的值,一致时保留原有type_description的值,可直接使用以下代码:
import pyspark.sql.functions as F SUMMARY = SUMMARY.withColumn( "type_description", F.when( SUMMARY.type_description != SUMMARY.rename_description, SUMMARY.rename_description ).otherwise(SUMMARY.type_description) )
通用场景封装
如果需要自定义比较列和指定返回的x列,可参考以下通用写法:
import pyspark.sql.functions as F # 自定义配置 compare_col_a = SUMMARY.待比较列1 compare_col_b = SUMMARY.待比较列2 specify_x_col = SUMMARY.指定的x列 # 两列不一致时返回该列的值 equal_return_val = compare_col_a # 两列一致时的返回值,可按需修改 SUMMARY = SUMMARY.withColumn( "结果列名", # 可替换为你需要的列名 F.when( compare_col_a != compare_col_b, specify_x_col ).otherwise(equal_return_val) )
注意事项
如果你的场景需要处理空值比较,普通的!=运算符无法正确识别空值不等的情况,可使用eqNullSafe方法做全等判断,取反后即可得到两列(含空值)不一致的判断结果:
# 空值兼容写法示例 F.when(~compare_col_a.eqNullSafe(compare_col_b), specify_x_col)
内容的提问来源于stack exchange,提问作者confused101
相关产品推荐
相关产品推荐

