我的问题相当于与R相关的帖Create Sparse Matrix from a data frame,除了我想在 Spark 上执行相同的操作(最好是在 Scala 中)。
正在创建稀疏矩阵的data.txt文件中的数据样本:
UserID MovieID Rating
2 1 1
3 2 1
4 2 1
6 2 1
7 2 1
所以最后列是电影ID,行是用户ID
1 2 3 4 5 6 7
1 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0
3 0 1 0 0 0 0 0
4 0 1 0 0 0 0 0
5 0 0 0 0 0 0 0
6 0 1 0 0 0 0 0
7 0 1 0 0 0 0 0
我实际上是通过在map
文件(没有标题)上进行data.txt
RDD转换来将值转换为整数,然后......我找不到函数用于稀疏矩阵创建。
val data = sc.textFile("/data/data.txt")
val ratings = data.map(_.split(',') match { case Array(user, item, rate) =>
Rating(user.toInt, item.toInt, rate.toInt)
})
...?
答案 0 :(得分:7)
最简单的方法是将Ratings
映射到MatrixEntries
创建CoordinateMatrix
:
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry}
val mat = new CoordinateMatrix(ratings.map {
case Rating(user, movie, rating) => MatrixEntry(user, movie, rating)
})
CoordinateMatrix
可以分别使用BlockMatrix
,IndexedRowMatrix
,RowMatrix
进一步转换为toBlockMatrix
,toIndexedRowMatrix
,toRowMatrix
。