Spark 1.5 Elementwise 产品

Spark 1.5 Elementwise Product

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

我可以毫无问题地在 Vector 上应用 weighting/transforming 向量(我下面代码中的 v2)来生成向量。然而,当我尝试将它应用于 RDD[Vector] 时,我得到:

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()

如何生成作为 v1 和 v2 的 Hadamard 乘积的 RDD[Vector]?

原来我需要把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 也有多个向量,而不是单个向量矩阵,但到目前为止似乎不存在。