python - PySpark 部分匹配列到字典值
问题描述
我有一本字典:
dict = {key1: "value1", key2: "value2", key3 : "value3"}
和一个带有单列的数据框 test_dta:
Col
value1
value2
value3
wrong_value
value1value4
...
我的预期结果是过滤数据框,它只会返回与字典值部分匹配的行。IE
Colu
value1
value2
value3
value1value4
我尝试过以下方法:
test_dta.filter(test_dta.Colu.contains(list(dict.values())))
但返回错误消息。
我可以知道实现这一目标的正确/其他方法吗?
谢谢!
解决方案
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|
#+------------+
推荐阅读
- sql - 如果 TO_CHAR(SYSDATE,'DD')='01' 在 SQL 中截断整个表
- chart.js - 如何在charts.js 的条内画线?
- php - 在 Symfony 4 中使用 form_div_layout 时未显示复选框标签
- python-3.x - 使用 selection_glyph 作为 hovertool 的渲染器
- javascript - 数组未正确填充日期
- apache-flink - XGBoost4j-Flink 是否兼容多节点并行?
- oracle - 如何使用 TO_DATE 从 Oracle 插入查询中的时间戳中删除毫秒?
- php - 如何访问 MySQL 服务器 - XAMPP Mac OS?
- c# - C#:使用来自 /etc/shadow 的 linux 用户的 salt 验证密码哈希 (SHA512)
- typescript - 量角器 - 如何从 [object Object] 中提取数字