无需收集到驱动程序即可创建 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。
谢谢!
假设 User
和 Item
都被编码为 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
我有一个 RDD[(User, Item, Count/Rating)] 我想将它转换成一个 RDD[Vector(ItemRatings)] 其中每个 Vector 都是用户 space。有没有办法不先收集到驱动程序就可以做到这一点?我目前使用的是 Datastax 4.7、Spark 1.2.1。
谢谢!
假设 User
和 Item
都被编码为 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