无需收集到驱动程序即可创建 Spark Vector RDD

Spark Vector RDD creation without collecting to driver

我有一个 RDD[(User, Item, Count/Rating)] 我想将它转换成一个 RDD[Vector(ItemRatings)] 其中每个 Vector 都是用户 space。有没有办法不先收集到驱动程序就可以做到这一点?我目前使用的是 Datastax 4.7、Spark 1.2.1。

谢谢!

假设 UserItem 都被编码为 Long 值,您可以使用 CoordinateMatrix

import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry}
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.rdd.RDD

val mat: CoordinateMatrix = new CoordinateMatrix(
  rdd.map{case (user, item, rating) => MatrixEntry(item, user, rating)}
)

val vectorRDD: RDD[Vector] = mat.toRowMatrix.rows