2017-07-04 3 views
2

と間違っているクラスがあり、コードが続くpickle.PicklingError:__newobj__引数から引数[0]私は私が火花を経由してストップワードを削除するトリング午前しようとしていますHadoopのパイソン

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: args[0] from newobj args has the wrong class

私はなぜ、誰かが私を助けることができません。あなたが唯一の行とcolumn.so、各単語を有するRDD上にマップを使用している

+0

こんにちは、私は同じ問題に直面しています、stopwords_deleteののfuctionを置き換えるために、リストの内包表記を使用することができます。解決を待っています。 –

答えて

1

予め
おかげで、タイプのものであるRDDの行全体は、forループ内の内のfuctionをstopwords_deleteに渡されそれは、私はまた、filtered_wordsとして

["shan't", "she'd", 'fuck', 'world', "who's"] 

をこの出力を得た

filtered_words=stopwords_delete(wordlist.flatMap(lambda x:x).collect()) 
print(filtered_words) 

、ストップワードにRDDと、それはこれを好きfails.Tryに一致するようにしようとしているあなたの関数で戻りが含まれます。

もう一つの方法は、あなたが火花を使用している間

filtered_words = wordlist.flatMap(lambda x:[i for i in x if i not in stopwords.words('english')]).collect() 
+0

こんにちはSureshさん、あなたの答えをありがとう、filtered_words = wordlist.flatMap(lambda x:[iは私がxでstopwords.words( 'english')])。同じエラー、最初のものは動作しますが、戻り値の型はrddではありません、あなたは私を助けることができますか? – Tiana

+0

戻り値の型はリストになります。私たちはリストを作成し、function.youにそれらに単語を追加することは、それがrddになる必要がありますか? – Suresh

関連する問題