PySpark中如何对RDD实现精确词匹配及批量过滤指定词汇?
Apache Spark RDD 精确词汇过滤实现方案
问题核心原因
原代码使用"can" in x[0]的子串匹配逻辑,会命中所有包含目标子串的词汇,因此返回了canada、candy等非预期结果。
实现方案
1. 单个词汇精确匹配
直接修改过滤条件为完全相等判断即可:
output_result = list_RDD.filter(lambda x: x[0] == "can")
2. 多指定词汇批量匹配
要支持自定义词汇列表的迭代过滤,可先将目标词汇转为集合(集合的成员查询效率远高于列表,大数据量下性能优势显著),再判断当前词汇是否属于目标集合:
# 定义待匹配的指定词汇列表 target_words = ['can', 'uni', 'over', 'day'] # 转为集合提升查询效率 target_words_set = set(target_words) # 过滤出所有精确匹配目标词汇的结果 output_result = list_RDD.filter(lambda x: x[0] in target_words_set)
可选:反向过滤(排除指定词汇)
如果需要反过来剔除列表中的指定词汇,仅保留其他词汇,调整条件为非成员判断即可:
output_result = list_RDD.filter(lambda x: x[0] not in target_words_set)
内容的提问来源于stack exchange,提问作者newprog1997
相关产品推荐
相关产品推荐

