我有一本字典:
dict = {key1: "value1", key2: "value2", key3 : "value3"}
以及一个单列Dataframe测试dta:
Col
value1
value2
value3
wrong_value
value1value4
...
我的预期结果是过滤dataframe,它只返回与dictionary值部分匹配的行。即
Colu
value1
value2
value3
value1value4
我尝试过以下方法:
test_dta.filter(test_dta.Colu.contains(list(dict.values())))
但返回错误消息。
我可以知道实现这一目标的正确/其他方法吗?
谢谢您!
1条答案
按热度按时间qij5mzcb1#
Contains
检查字符串中是否存在子字符串,并.isin
检查项目列表中是否有匹配的值,但您的大小写是基于列表匹配字符串。而是使用
.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|
+------------+