pyspark将列部分匹配到字典值

uelo1irk  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(537)

我有一本字典:

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())))

但返回错误消息。
我可以知道实现这一目标的正确/其他方法吗?
谢谢您!

qij5mzcb

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|

+------------+

相关问题