我有一個RDD [(User,Item,Count/Rating)],我想將它轉換爲RDD [Vector(ItemRatings)],其中每個Vector是該項目的評分在用戶空間。有沒有辦法做到這一點,而不先收集驅動程序?我目前使用的是Datastax 4.7,Spark 1.2.1。Spark矢量RDD創建不收集到驅動程序
謝謝!
我有一個RDD [(User,Item,Count/Rating)],我想將它轉換爲RDD [Vector(ItemRatings)],其中每個Vector是該項目的評分在用戶空間。有沒有辦法做到這一點,而不先收集驅動程序?我目前使用的是Datastax 4.7,Spark 1.2.1。Spark矢量RDD創建不收集到驅動程序
謝謝!
假設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
列相似函數的向量謝謝..這是一個有用的解決方案。不幸的是,用戶和項目和字符串..但我想我可以變成龍如果沒有替代品。 –
你可以像[Daniel Darbos](http://stackoverflow.com/users/3318517/daniel-darabos)中提到的那樣使用'groupBy',但是你仍然需要在vector中的'user'和index之間的映射。 – zero323
'RDD.groupByKey'不是你要找的東西嗎? –
你的RDD [Vector(ItemRatings)]是什麼,因爲你有三個實體是User,Item和Rating。什麼是ItemRatings實體?它代表什麼? – eliasah
RDD [Vector(ItemRatings)]中的每一行都是單個用戶的收視率向量。 @DanielDarabos - groupByKey會工作,除了我需要它轉換爲RowMatrix –