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