首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用.contains()在PySpark中进行单子或多子串筛选?

如何使用.contains()在PySpark中进行单子或多子串筛选?
EN

Stack Overflow用户
提问于 2021-11-10 17:28:29
回答 2查看 2.5K关注 0票数 0

这是一个简单的问题(我认为),但我不确定回答它的最佳方法。

我需要基于存在“子字符串”的列进行过滤,该列包含Spark中的字符串。

目前,我正在执行以下操作(使用.contains进行过滤):

代码语言:javascript
运行
复制
data = [[1, "ABC"], [2, "DEF"], [3, "DEF"], [4, "JFKLMN"], [5, "JFKOPQ"], [6, "MNO"]]

df = pd.DataFrame(data, columns=["Item", "String"])
sdf = spark.createDataFrame(df)

但是我想概括一下,这样我就可以过滤到一个或多个字符串,如下所示:

代码语言:javascript
运行
复制
filtered_sdf = sdf.filter(
    spark_fns.col("String").contains("JFK") | spark_fns.col("String").contains("ABC")
) 

代码语言:javascript
运行
复制
filtered_sdf = sdf.filter(
    spark_fns.col("String").contains("ABC")
)

理想的中,.contains()部分是一个预置参数,包含1+子字符串。

有人知道最好的方法是什么吗?还是另一种方法?

我尝试过使用.isin(substring_list),但是它不起作用,因为我们正在搜索子字符串的存在。

EN

回答 2

Stack Overflow用户

发布于 2022-08-25 14:15:54

您可以创建适合所有所需模式的regex模式:

代码语言:javascript
运行
复制
list_desired_patterns = ["ABC", "JFK"]
regex_pattern = "|".join(list_desired_patterns)

然后应用rlike列方法:

代码语言:javascript
运行
复制
filtered_sdf = sdf.filter(
    spark_fns.col("String").rlike(regex_pattern)
)

这将过滤所需模式列表中的任何匹配。

票数 1
EN

Stack Overflow用户

发布于 2021-11-10 20:10:57

使用regex匹配解决了这个问题!

代码语言:javascript
运行
复制
filtered_sdf = sdf.filter(
    spark_fns.col("String").contains("JFK") | spark_fns.col("String").rlike("ABC")
) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69917678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档