Python PySpark将列部分匹配到字典值
我有一本字典:Python PySpark将列部分匹配到字典值,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一本字典: dict = {key1: "value1", key2: "value2", key3 : "value3"} 以及具有单列的数据帧测试dta: Col value1 value2 value3 wrong_value value1value4 ... 我的预期结果是过滤数据帧,在这里它只返回与字典值部分匹配的行。即 Colu value1 value2 value3 value1value4 我
dict = {key1: "value1", key2: "value2", key3 : "value3"}
以及具有单列的数据帧测试dta:
Col
value1
value2
value3
wrong_value
value1value4
...
我的预期结果是过滤数据帧,在这里它只返回与字典值部分匹配的行。即
Colu
value1
value2
value3
value1value4
我尝试过以下方法:
test_dta.filter(test_dta.Colu.contains(list(dict.values())))
但返回一条错误消息
我可以知道实现这一目标的正确/其他方法吗
谢谢大家!
包含
检查字符串中是否存在子字符串,。isin
检查项目列表中是否存在任何值匹配,但您的案例是基于列表匹配字符串
相反,使用.rlike
我们可以生成或(|)
条件并仅过滤匹配的行
示例:
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|
#+------------+
包含
检查字符串中是否存在子字符串,以及。isin
检查在项目列表中是否有任何值匹配,但您的案例将基于列表匹配字符串
相反,使用.rlike
我们可以生成或(|)
条件并仅过滤匹配的行
示例:
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|
#+------------+