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

PySpark中如何过滤同一DataFrame中两列不等的数据?

PySpark实现DataFrame列值不等过滤的正确方法

在PySpark中,实现过滤DataFrame内A列值不等于B列值的数据,有以下几种可靠方法:

直接使用!=运算符

这是最直观的写法,确保列引用正确即可:

# 方式1:字典式列引用
df.filter(df["A"] != df["B"])

# 方式2:属性式列引用
df.filter(df.A != df.B)

# 用where替代filter,效果完全一致
df.where(df["A"] != df["B"])

取反等于条件

如果偏好取反的写法,注意使用正确的列表达式即可:

from pyspark.sql.functions import col

# 用col函数引用列
df.filter(~(col("A") == col("B")))

# 直接用DataFrame的列引用
df.filter(~(df.A == df.B))

使用SQL表达式

如果习惯SQL语法,可直接传入字符串条件:

df.where("A != B")

关于你之前报错的可能原因

你尝试的写法本身是可行的,报错大概率是以下问题导致:

  • 列名拼写错误:确认DataFrame中确实存在"A"和"B"列
  • 数据类型不兼容:比如A列是字符串、B列是数值类型,直接比较会触发类型错误
  • 未导入必要函数:使用col时忘记执行from pyspark.sql.functions import col
  • null值影响:如果列包含null,==或!=会返回null,这类行会被默认过滤;若需包含null场景,需额外处理,比如:
    df.filter((df["A"] != df["B"]) | df["A"].isNull() | df["B"].isNull())
    

内容的提问来源于stack exchange,提问作者Arslan Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:41:28