【发布时间】:2018-12-12 06:42:53
【问题描述】:
我正在使用 Spark Scala 来计算 Dataframe 行之间的余弦相似度。
数据框架构如下:
root
|-- itemId: string (nullable = true)
|-- features: vector (nullable = true)
下面的数据框示例
+-------+--------------------+
| itemId| features|
+-------+--------------------+
| ab |[4.7143,0.0,5.785...|
| cd |[5.5,0.0,6.4286,4...|
| ef |[4.7143,1.4286,6....|
........
+-------+--------------------+
计算余弦相似度的代码:
val irm = new IndexedRowMatrix(myDataframe.rdd.zipWithIndex().map {
case (row, index) => IndexedRow(row.getAs[Vector]("features"), index)
}).toCoordinateMatrix.transpose.toRowMatrix.columnSimilarities
在 irm 矩阵中,我有 (i, j, score) 其中 i, j 是项目 i 和 j 的原始数据帧的索引。 我想要获得 (itemIdA, itemIdB, score) 其中 itemIdA 和 itemIdB 分别是索引 i 和 j 的 id,通过将此 irm 与初始数据帧连接或是否有更好的选择?
【问题讨论】:
标签: scala apache-spark matrix machine-learning cosine-similarity