apache-spark - spark-如何在使用 RowMatrix 计算相似度后检索项目对

标签 apache-spark apache-spark-mllib

我在我的推荐系统中遇到了“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。

最佳答案

我遇到了和你一样的问题,解决方法如下。

  • 你应该注意到 columnSimilarities() 是调用列向量的相似性。然而,我们的“行”总是由行向量组成。所以你应该得到“行”的转置,假设它是“tran_rows”。然后计算 tran_rows.columnSimilarities()
  • 那么事情就简单了。在 columnSimilarities() 的结果中,索引 i 和 j 正好对应项目 i 和项目 j。
  • 关于apache-spark - spark-如何在使用 RowMatrix 计算相似度后检索项目对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860472/

    相关文章:

    apache-spark - 在 Apache Spark Python 中自定义 K-means 的距离公式

    apache-spark - 如何在 Spark-MLlib PMML 文件中用精确的列名替换 DataField 值?

    scala - 使用 Seq ("key") 语法对 Spark DataFrame 进行左外复杂连接

    scala - Spark 应用程序conf中的setMaster与sparkSubmit上的--master标志之间的差异或冲突

    python - python : java. lang.reflect.InaccessibleObjectException 上的 Apache-Spark 错误

    scala - 支持和提升 mllib spark/scala 中的 fp-growth 规则

    scala - 与普通方法相比,通过最小散列计算的 Spark Jaccard 相似度计算速度较慢

    java - 如何从 spark 应用程序的代码中监控/生成 CPU/RAM 利用率的汇总报告?

    python - 如何在 PySpark 数据帧的第 0 轴上找到数组(数组列)的平均值?

    apache-spark - 如何服务 Spark MLlib 模型?