我在我的推荐系统中遇到了“all-pairs Similarity”问题。感谢 this databricks blog ,看来 RowMatrix 可能会来帮忙。
但是,RowMatrix 是一种没有有意义的行索引的矩阵类型,因此我不知道如何在调用 columnSimilarities(threshold)
后检索相似度结果。为 特定项目 i 和 j
以下是有关我正在做的事情的一些详细信息:
1) 我的数据文件来自 Movielens格式如下:
user::item::rating
2) 我建立了一个 RowMatrix,其中每个稀疏向量 i 代表所有用户对这个项目 i 的评分
val dataPath = ...
val ratings: RDD[Rating] = sc.textFile(dataPath).map(_.split("::") match {
case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble)
})
val rows = ratings.map(rating=>(rating.product, (rating.user, rating.rating)))
.groupByKey()
.map(p => Vectors.sparse(userAmount, p._2.map(r=>(r._1-1, r._2)).toSeq))
val mat = new RowMatrix(rows)
val similarities = mat.columnSimilarities(0.5)
现在我得到一个坐标矩阵
similarities
.如何获得特定项目 i 和 j 的相似度?虽然它可以用来检索 RDD[MatrixEntry]
,我不确定第 i 行和第 j 列是否对应于项目 i 和 j。
最佳答案
我遇到了和你一样的问题,解决方法如下。
关于apache-spark - spark-如何在使用 RowMatrix 计算相似度后检索项目对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860472/