现在有一个矩阵和一个向量,我想对它们进行点积操作。以下是Scala代码:
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吗?