pyspark新手 - 我有一堆文本文档,我想从这些文本文档中获取所有单词。
我可以看到这一步将每个文档转换为单词列表:
words = documents.map(lambda v: re.split('[\W_\']+',v.lower()))
display(words.toDF())
但是我也希望从中删除停用词(在此代码之前某处定义的单词列表)。问题是RDD"字"并不仅仅是一个单词列表。它是单词列表的列表。 例如,words.first()将返回单词列表,而不仅仅是一个单词。那么如何从"单词"?
中删除属于停用词的任何单词我尝试words2 = words.map(lambda x:x if x not in stoplist)
并收到错误" org.apache.spark.SparkException:由于阶段失败导致作业中止:"
答案 0 :(得分:2)
例如如下:
pattern = re.compile('[\W_\']+')
(documents
.flatMap(lambda v: pattern.split(v.lower()))
.filter(lambda w: w and w not in stoplist))
或者如果你想保留记录而不展平:
(documents
.map(lambda v: pattern.split(v.lower()))
.map(lambda ws: [w for w in ws if w and w not in stoplist]))