我有字典:
dict = {key1: "value1", key2: "value2", key3 : "value3"}
和带有单个列的数据框test_dta:
Col
value1
value2
value3
wrong_value
value1value4
...
我的预期结果是过滤数据框,该数据框将仅返回与字典值部分匹配的行。即
Colu
value1
value2
value3
value1value4
我尝试了以下方法:
test_dta.filter(test_dta.Colu.contains(list(dict.values())))
但返回错误消息。
我可以知道实现此目标的正确/其他方法吗?
谢谢!
答案 0 :(得分:3)
Contains
检查字符串中的子字符串是否存在,并且.isin
检查在< em>项目列表,但您的情况是根据列表匹配字符串。
代替使用 .rlike
,我们可以生成 or(|)
条件并仅过滤匹配的行。
Example:
df.show()
#+------------+
#| Col|
#+------------+
#| value1|
#| value2|
#| value3|
#| wrong|
#|value1value2|
#+------------+
dict = {'key1': "value1", 'key2': "value2", 'key3' : "value3"}
from pyspark.sql.functions import *
#filter using rlike and generate expression dynamically based on dict.values
df.filter(col("Col").rlike("|".join(["(" +l+")" for l in list(dict.values())]))).show()
#+------------+
#| Col|
#+------------+
#| value1|
#| value2|
#| value3|
#|value1value2|
#+------------+