Scala Spark中基于DIMSUM的余弦相似性

Scala Spark中基于DIMSUM的余弦相似性,scala,apache-spark,similarity,trigonometry,Scala,Apache Spark,Similarity,Trigonometry,我有一个非常简单的代码来尝试余弦相似性: import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.mllib.linalg.distributed.{MatrixEntry, CoordinateMatrix, RowMatrix} val rows= Array(((1,2,3,4,5),(1,2,3,4,5),(1,2,4,5,8),(3,4,1,2,7),(7,7,7,7,7))) val m

我有一个非常简单的代码来尝试余弦相似性:

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.distributed.{MatrixEntry,   CoordinateMatrix, RowMatrix}

val rows= Array(((1,2,3,4,5),(1,2,3,4,5),(1,2,4,5,8),(3,4,1,2,7),(7,7,7,7,7)))
val mat = new RowMatrix(rows)

val simsPerfect = mat.columnSimilarities()
val simsEstimate = mat.columnSimilarities(0.8)
我在拥有Spark 1.5的Amazon AWS上运行了这段代码,但在最后两行中我得到了以下消息: “Erroe:value不是org.apache.spark.rdd.rdd[(int,int)]的成员”


你能帮我解决这个问题吗?

我找到了答案。我需要将矩阵转换为RDD。以下是正确的代码:

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.distributed.{MatrixEntry, CoordinateMatrix, RowMatrix}
import org.apache.spark.rdd._
import org.apache.spark.mllib.linalg._


def matrixToRDD(m: Matrix): RDD[Vector] = {
val columns = m.toArray.grouped(m.numRows)
val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD.
val vectors = rows.map(row => new DenseVector(row.toArray))
sc.parallelize(vectors)
}

val dm: Matrix = Matrices.dense(5, 5,Array(1,2,3,4,5,1,2,3,4,5,1,2,4,5,8,3,4,1,2,7,7,7,7,7,7))
val rows = matrixToRDD(dm)
val mat = new RowMatrix(rows)
val simsPerfect = mat.columnSimilarities()
val simsEstimate = mat.columnSimilarities(0.8)

println("Pairwise similarities are: " + simsPerfect.entries.collect.mkString(", "))

println("Estimated pairwise similarities are: " +     simsEstimate.entries.collect.mkString(", "))

干杯

您确定要在行矩阵上应用列相似性吗?是的,上面的代码正是我运行的代码。val mat=new RowMatrix(rows)假设将RomMatrix设置为mat so mat.columnComparizations()将ColumnComparizations()应用于RowMatrixI无法再现错误…是的,您是对的。很抱歉!问题是RowMatrix没有生成:val data=Array(((1,2,3,4,5),(1,2,3,4,5),(1,2,4,5,8),(3,4,1,2,7),(7,7,7,7,7,7)))val rows=sc.parallelize(data)val mat=我得到的最后一行的新RowMatrix(rows)错误有没有办法使用1到N的相似性搜索吗?在找到答案的地方添加引用很好: