如何将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
相关产品推荐
相关产品推荐

