PySpark中OR运算符搭配不等于条件的正确用法及代码纠错
问题原因及解决方案
你的代码逻辑错误,把逻辑与(AND)写成了逻辑或(OR),导致结果不符合预期。
错误逻辑分析
你写的表达式:
(~F.col("Col1").like("%12345%")) | (~F.col("Col1").like("%67890%"))
等价于 ~(A & B)(德摩根定律),意思是「不同时包含12345和67890」。但你的需求是「既不包含12345,也不包含67890」,对应的逻辑应该是 ~A & ~B,或者等价的 ~(A | B)。
正确代码写法
有两种等价的正确写法:
- 直接使用逻辑与(&)
(~F.col("Col1").like("%12345%")) & (~F.col("Col1").like("%67890%"))
- 利用德摩根定律简化(可读性更强)
~(F.col("Col1").like("%12345%") | F.col("Col1").like("%67890%"))
结果验证
- 第一行数据包含12345和67890,表达式会返回
FALSE; - 第二行数据不包含这两个值,表达式会返回
TRUE,完全符合你的需求。
内容的提问来源于stack exchange,提问作者SaurabhShelar
相关产品推荐
相关产品推荐

