如何使用spark来实现矩阵向量乘法?

时间:2016-05-14 10:05:27

标签: apache-spark matrix-multiplication

我有一个存储在元组中的矩阵

mat = RDD[(i-idx, j-idx, value)]

和元组中的向量

vec = RDD[(idx, value)]

我想做垫子* vec,我计划的是:

val map_mat = mat.map(x => (x._2, (x._1, x._3))) // Turn mat in to key-value pairs.
val join_mat = map_mat.join(vec) // Join the mat and vec on (j-idx == idx)
val mul_mat = join_mat.map(x => (x._2._1._1, x._2._1._2 * x._2._2))
val res_vec = mul_mat.reduceByKey(_ + _)

在完成每个步骤之后,我应该得到:

join_mat: RDD[(j-idx, ((i-idx, value1), value2)]
mul_mat: RDD[(i-idx, value1 * value2)]
res_vec: RDD[(i-idx, sum(value1 * value2)]

它可能有用,但我觉得编写这样的代码真是太讨厌了......特别是 mul_mat 的声明。

有没有更好的方法来完成这项工作?谢谢!

我不想使用MLlib而且MLlib没有为Coordinate Matrix实现矩阵多重化,所以我必须自己实现它。

0 个答案:

没有答案