我试图写一个片段,以获得结果或不等于条件,但我的代码不工作。
| Col1|Col2|
| --------------|--------------|
| 12345;3456767890|文本|
| 34567;9876565432|文本|
我的条件是细胞不应该包含12345或67890。所以理想情况下,我希望第一行为FALSE,第二行为TRUE。下面是我写的代码
(~F.col("Col1").like("%12345%")) | (~F.col("Col1").like("%67890%"))
但是上面代码的结果对于两行都是TRUE。有人能纠正我哪里错了吗?
3条答案
按热度按时间6tr1vspr1#
您可以将
rlike
与 *pipe/或 *(|
)一起使用:或者按照您的方法,您需要添加缺少的括号:
输出:
tp5buhyn2#
我的条件是细胞不应该包含12345或67890。
尽管我们在日常英语中是这样表达的,你应该只用&而不是|.
逻辑是字符串不包含12345,也不包含67809。
mf98qq943#
您可以使用XOR来评估只有一个条件为真。
输出:
df.withColumn("Result", result).show()
:| Col1|Col2|结果|
| --------------|--------------|--------------|
| 12345;3456767890|文本|假的|
| 34567;9876565432|文本|假的|
| 12345;65432|文本|真|
pysparkwhen:
输出:
df.withColumn("Result", result).show()
:| Col1|Col2|结果|
| --------------|--------------|--------------|
| 12345;3456767890|文本|都不是条件。..|
| 34567;9876565432|文本|都不是条件。..|
| 12345;65432|文本|条件1真|
XOR的工作原理如下:
如果两个条件的值相同,则可以对该值求反以获得true:
示例: