PySpark如何按数组品牌列表模糊匹配筛选DataFrame行
你可以通过构造正则匹配规则,结合PySpark内置的rlike方法实现模糊匹配筛选,完整实现步骤如下:
完整代码示例
import re from pyspark.sql import functions as F # 替换为你的300+快餐品牌列表 brand_list = ["Mcdonald's", "Subway", "KFC", "Burger King"] # 1. 转义品牌名中的正则特殊字符(比如单引号、点、星号等),避免匹配异常 escaped_brand_list = [re.escape(brand) for brand in brand_list] # 2. 拼接为「品牌1|品牌2|品牌3」格式的正则规则,含义为匹配任意一个品牌名 match_pattern = "|".join(escaped_brand_list) # 3. 筛选Name列包含任意品牌名的行,自动排除不匹配的行 result_df = df.filter(F.col("Name").rlike(match_pattern))
可选补充
如果需要额外标注每行匹配到的具体品牌,可以新增一列提取匹配结果:
result_df = result_df.withColumn("matched_brand", F.regexp_extract(F.col("Name"), match_pattern, 0))
常见场景适配
- 大小写不敏感匹配:如果门店名存在大小写不统一的情况(比如出现
mcdonald's、McDonald's等变体),可以统一转小写后匹配:escaped_brand_list = [re.escape(brand.lower()) for brand in brand_list] match_pattern = "|".join(escaped_brand_list) result_df = df.filter(F.lower(F.col("Name")).rlike(match_pattern)) - 性能说明:300个品牌对应的正则规则长度很小,PySpark的
rlike为原生实现,无需额外优化即可正常运行。
内容的提问来源于stack exchange,提问作者user2896120
相关产品推荐
相关产品推荐

