2015-09-14 66 views
1

Spark 1.5最近出來了,並且在Python中有元素明智的乘法(http://spark.apache.org/docs/latest/mllib-feature-extraction.html)。Spark 1.5 Elementwise Product

我沒有任何問題在矢量上應用加權/變換矢量(在我的代碼中,v2)來產生矢量。然而,當我試圖把它在RDD [矢量],我得到:

TypeError: Cannot convert type < type 'numpy.float64'> into Vector.

這裏是我的代碼:

from pyspark.mllib.linalg import Vectors 
from pyspark.mllib.feature import ElementwiseProduct 

v1 = sc.parallelize(Vectors.dense([2.0, 2.0, 2.0])) 
v2 = Vectors.dense([0.0, 1.0, 2.0]) 

transformer = ElementwiseProduct(v2) 
transformedData = transformer.transform(v1) 
print transformedData.collect() 

我如何產生RDD [矢量]這是V1的阿達瑪產品和v2?

回答

0

原來我需要打開V1到一行矩陣

mat = RowMatrix(v1) 

所以例如:

from pyspark.mllib.linalg.distributed import RowMatrix 

v1 = sc.parallelize([[2.0, 2.0, 2.0], [3.0, 3.0, 3.0]]) 
mat = RowMatrix(v1) 
v2 = Vectors.dense([0.0, 1.0, 2.0]) 

transformer = ElementwiseProduct(v2) 
transformedData = transformer.transform(mat.rows) 
print transformedData.collect() 

將打印: [DenseVector([0.0,2.0,4.0]),DenseVector ([0.0,3.0,6.0])]

我真正需要的是一個函數,它允許v2也有多個向量,而不是一個向量矩陣,但到目前爲止似乎並不存在。