Pyspark文本分析:如何删除word列值属于停用词词典的对应行
PySpark 过滤停用词行的实现方案
核心逻辑
剔除word列值存在于停用词集合内的行,保留非停用词的行即可,以下是两种常用实现方式:
方法1:isin取反过滤(适合小规模停用词库)
直接调用PySpark内置的isin方法判断值是否在停用词列表中,取反后过滤,写法最简单:
from pyspark.sql import functions as F # df为你的原始单词DataFrame,stopwords为你定义的停用词集合 filtered_df = df.filter(~F.col("word").isin(list(stopwords))) # 执行后查看结果 filtered_df.show()
输出结果和你预期的一致:
+-------+ | word | +-------+ | food| |amazing| | great| +-------+
方法2:左反连接过滤(适合万级以上大规模停用词库)
如果停用词数量非常多,用isin性能会下降,改用left_anti左反连接的方式性能更稳定:
# 先把停用词集合转为PySpark DataFrame stopwords_df = spark.createDataFrame([(word,) for word in stopwords], schema=["word"]) # 左反连接:只保留左表中没有和右表停用词匹配上的行 filtered_df = df.join(stopwords_df, on="word", how="left_anti")
注意事项
isin方法不支持直接传入Python集合类型,需要先转成列表list(stopwords)再传入- 两种方法的输出结果完全一致,可根据停用词规模选择即可
内容的提问来源于stack exchange,提问作者NekoJel
相关产品推荐
相关产品推荐

