You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PySpark中如何比较两列,值不同时选择指定列的实现方法

PySpark 两列比较取值实现方案

你当前编写的代码存在两个问题:

  1. 没有补全when的otherwise分支,逻辑不完整
  2. 错误使用了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:54:08