2016-06-28 5 views
0

にそうここに私が何をしようとしているいくつかのサンプルコードですありません:、私は文の特徴ベクトルを)(groupByKey後DenseVectorsを合計Pysparkシェルで動作しますが、火花提出

まず構築しています使用Word2Vec:

from pyspark.ml.feature import Word2Vec 

# Input data: Each row is a bag of words from a sentence or document. 
documentDF = sqlContext.createDataFrame([ 
    ("Hi I heard about Spark".split(" "),), 
    ("I wish Java could use case classes".split(" "),), 
    ("Logistic regression models are neat".split(" "),) 
], ["text"]) 
# Learn a mapping from words to Vectors. 
word2Vec = Word2Vec(vectorSize=3, minCount=0, inputCol="text", outputCol="result") 
model = word2Vec.fit(documentDF) 
result = model.transform(documentDF) 

Converting output result to an RDD: 
result_rdd=result.select("result").rdd 
rdd_with_sample_ids_attached = result_rdd.map(lambda x: (1, x[0])) 
rdd_with_sample_ids_attached.collect() 

出力: [(1、DenseVector([0.0472、-0.0078、0.0377]))、(1、DenseVector([ - 0.0253、-0.0171、0.0664]) )、(1、DenseVector([0.0101,0.0324,0.0158]))]

は今、私はgroupByKeyを(DO)と、以下のように各グループにDenseVectorsの和を見つける:

rdd_sum = rdd_with_sample_ids_attached.groupByKey().map(lambda x: (x[0], sum(x[1]))) 
rdd_sum.collect() 

出力: [(1、DenseVector([0.0319、示されているように、このコードはpysparkシェルで完全に動作します。私は、単一のパーティション、同じエラーにRDDを再分割しようとしている

File "/mnt1/yarn/usercache/hadoop/appcache/application_1465567204576_0170/container_1465567204576_0170_01_000002/pyspark.zip/pyspark/sql/functions.py", line 39, in _ 
    jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col) 
AttributeError: 'NoneType' object has no attribute '_jvm' 

:私は同じコードを提出するときしかし、火花提出し、私は次のエラーを取得します。 助けてください。

+0

このエラーは、 'sc'が' NoneType'であることを示唆しています。たぶん大規模なデータセットを扱っていて、クラスタが死んでいるかもしれませんか?これは非常に可能です。 'groupByKey'を使用しています。これは、キーとその値を保持するのに十分な大きさのメモリが必要です。 – ShuaiYuan

+0

また、 'groupByKey'の後のラムダ関数は、合計を与えません。 – ShuaiYuan

+0

Hey!いいえ、上記のサンプルデータセットを試しました。同じエラー。 pysparkシェルで動作しますが、同じコードを.pyファイルでspark-submitすると動作しません。また、ラムダ関数は和を計算します - それは質問のタイプミスです。私は質問で自分のコードを編集しました。 グループ化されたIDに関連付けられているDenseVectorsのリストを展開できますし、len()操作も実行できます。失敗するsum()だけです。恥ずかしくて、それはpysparkシェルとipythonノートブックで動作するので、私はここで何か不足していると感じています。 –

答えて

1

それを実感してください! 問題は次のように私は私のスクリプトでインポート機能を持っていたということでした。

from pyspark.sql.functions import * 

これは、内蔵のニシキヘビの合計を(置き換え合計()関数)を輸入しました。このインポート関数を削除すると、正しく機能しました。 pythonの組み込みsum()関数がDenseVectorsを追加できるとき、pyspark.sql.functionsからインポートされたsum()はそうすることができません。

+0

絶対に 'import *' – ShuaiYuan

+0

明らかにこれはあなたの質問にありません:) – ShuaiYuan

関連する問題