我正在尝试通过spark删除停止词,代码如下
from nltk.corpus import stopwords
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)
word_list=["ourselves","out","over", "own", "same" ,"shan't" ,"she", "she'd", "what", "the", "fuck", "is", "this","world","too","who","who's","whom","yours","yourself","yourselves"]
wordlist=spark.createDataFrame([word_list]).rdd
def stopwords_delete(word_list):
filtered_words=[]
print word_list
for word in word_list:
print word
if word not in stopwords.words('english'):
filtered_words.append(word)
filtered_words=wordlist.map(stopwords_delete)
print(filtered_words)
我得到的错误如下:
pickle.picklingerror:newobj args中的args[0]具有错误的类
我不知道为什么,有人能帮我吗。
提前谢谢
3条答案
按热度按时间zu0ti5jz1#
这与停止词模块的上传有关。作为一个围绕导入stopwords库的工作,函数本身中包含。请参阅下面链接的类似问题。我有同样的问题,这项工作解决了这个问题。
类似问题
我建议你
from pyspark.ml.feature import StopWordsRemover
作为永久固定点。k3bvogb12#
您正在使用一个rdd上的Map,该rdd只有一行,每个字作为一列。因此,类型为的rdd的整行被传递给stopwords\u delete函数,并且在其中的for循环中,尝试将rdd与stopwords匹配,但失败了。请这样尝试,
我把这个输出作为过滤词,
另外,在函数中包含一个return。
另一种方法,你可以用列表理解来代替stopwords\u delete函数,
piztneat3#
可能是因为你每次都在executor上定义stopwords.words('english')。在外面定义它,这样就行了。