在pyspark中过滤字符串

时间:2016-11-22 14:03:24

标签: apache-spark pyspark

我有一个包含我要过滤的字符串的列。

我希望列“水果”包含:(“apple”或“pear”或“banana”)而不是“ananas”。

当我使用以下代码时,一切都很完美:

results_raw.where(
    (col('fruits').like('%apple%')) | 
    (col('fruits').like('%pear%')) |
    (col('fruits').like('%banana%')) |
    (col('fruits').like('%orange%')) )

然而,当我添加如下的附加条件时,它不再起作用了:

results_raw.where(
    (col('fruits').like('%apple%')) | 
    (col('fruits').like('%pear%')) |
    (col('fruits').like('%banana%')) |
    (col('fruits').like('%orange%')) &
    (col('fruits') != ('%ananas%')) )

这似乎是一个基本问题,但我一直在努力解决“而不是”的情况。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用~否定(并且您需要按顺序保留括号):

(cond1 | cond2 | cond3 | cond4) & ~col('fruits').like('%ananas%')