有一個矩陣,我想用矢量執行它的點積。以下是Scala代碼:如何使用Spark的RDD執行帶有矢量的矩陣點積產品
val matrix = sc.parallelize(List(
(("v1","v1"),2),(("v1","v2"),4),(("v1","v3"),1),(("v2","v2"),5),
(("v2","v3"),1),(("v3","v3"),2)))
val vector = sc.parallelize(List(("v1",4),("v2",1),("v3",5)))
val dotproduct = matrix.flatMap{x => {
vector.flatMap { y => {
if(x._1._2 == y._1) Tuple2(x._1._1, x._2 * y._2)
}}
}}.reduceByKey((_,_) => _+_)
但是發生下列錯誤:
<console>:25: error: type mismatch;
found : (String, Int)
required: TraversableOnce[?]
val dotproduct = matrix.flatMap{ x => { vector.flatMap { y => { if(x._1._2 == y._1) (x._1._1, x._2 * y._2) }}}}.reduceByKey((_,_) => _+_)
^
我不知道,如果在RDD嵌套操作就可以了。 Spark MLlib是否提供任何API來執行矩陣和向量之間的點積?
矩陣是對稱的,所以只有我使用對角線上方的元素。 – victorming888