You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas字符串包含子串的判断逻辑迁移为PySpark DataFrame实现

PySpark 实现方案

实现逻辑

和你原有的pandas逻辑完全对齐:先统一把所有待匹配子串、主串转为小写,再判断主串是否包含任意一个待匹配子串。

完整代码

from pyspark.sql import functions as F
import re

# 步骤1:提取df2的所有子串,统一转小写后拼接为正则匹配模式
# 增加re.escape处理避免子串含正则特殊字符导致匹配异常,不需要可去掉map(re.escape)部分
sub_str_list = df2.select(F.lower(F.col("sub_string")).alias("sub_low")) \
                  .rdd.flatMap(lambda x: x) \
                  .map(re.escape) \
                  .collect()
regex_pattern = "|".join(sub_str_list)

# 步骤2:给df1新增isRT字段,判断小写后的main_string是否匹配正则
df1 = df1.withColumn("isRT", F.lower(F.col("main_string")).rlike(regex_pattern))

# 查看结果
df1.show()

输出结果

和你要求的输出完全一致:

+---+-------------------------+-----+
| id|              main_string| isRT|
+---+-------------------------+-----+
|  1|               i am a boy| true|
|  2|         i am from london| true|
|  3|          big data hadoop|false|
|  4|          always be happy| true|
|  5|  software and hardware  |false|
+---+-------------------------+-----+

注意事项

如果df2的数据量极大(超过10万条子串),不建议用这种收集到Driver端拼接正则的方案,可以改用left join + contains的方式实现,避免Driver内存溢出。

内容的提问来源于stack exchange,提问作者Santhoshhadoop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:54:03