加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Spark – 如何根据项目评级创建稀疏矩阵

发布时间:2020-12-16 09:28:31 所属栏目:安全 来源:网络整理
导读:我的问题相当于R-related post Create Sparse Matrix from a data frame,除了我想在Spark上执行相同的操作(最好是在Scala中). data.txt文件中的数据样本,从中创建稀疏矩阵: UserID MovieID Rating2 1 13 2 14 2 16 2 17 2 1 所以最后列是电影ID,行是用户ID
我的问题相当于R-related post 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

我实际上开始在data.txt文件(没有标题)上进行地图RDD转换,将值转换为Integer,但是……我找不到用于稀疏矩阵创建的函数.

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)
  })
...?

解决方法

最简单的方法是将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,rating)
})

CoordinateMatrix可以分别使用toBlockMatrix,toIndexedRowMatrix和toRowMatrix进一步转换为BlockMatrix,IndexedRowMatrix,RowMatrix.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读