所以這裏是什麼,我試圖做一些示例代碼:一個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()和發現各組中的DenseVectors的總和如下:
rdd_sum = rdd_with_sample_ids_attached.groupByKey().map(lambda x: (x[0], sum(x[1])))
rdd_sum.collect()
輸出: [(1,DenseVector([0.0319, 0.0075,0.1198]))]
如圖所示,此代碼在pyspark外殼中完美工作。然而,當我提出相同的代碼火花提交,我得到以下錯誤:
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'
我試圖重新分區RDD到單個分區,同樣的錯誤。 請幫忙嗎?
錯誤提示'sc'是'NoneType'。也許你正在處理一個大型數據集並且你的集羣已經死了?這是非常可能的。你正在使用'groupByKey',它需要足夠大的內存來容納任何鍵和它的值。 – ShuaiYuan
'groupByKey'後面的lambda函數不給總和 – ShuaiYuan
嘿!不,我嘗試使用上面發佈的同一樣本數據集。同樣的錯誤。在pyspark外殼中工作,當我點燃.py文件中的相同代碼時不起作用。另外,lambda函數確實做了一筆 - 這是一個錯誤的問題。我在問題中編輯了我的代碼。 我可以展開與分組標識關聯的DenseVectors列表,也可以執行len()操作。它只是失敗的總和()。令人沮喪的是,它在pyspark外殼和ipython筆記本上工作,所以我覺得我在這裏錯過了一些東西。 –