我有一个存储在元组中的矩阵
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实现矩阵多重化,所以我必须自己实现它。