Spark - 如何根据项目评级

时间:2015-09-04 16:16:52

标签: scala apache-spark sparse-matrix recommendation-engine

我的问题相当于与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)
  })
...?

1 个答案:

答案 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可以分别使用BlockMatrixIndexedRowMatrixRowMatrix进一步转换为toBlockMatrixtoIndexedRowMatrixtoRowMatrix