使用 apache spark 在 TFIDF 上进行余弦相似度

Cosine similarity on TFIDF using apache spark

我正在尝试使用 Apache Spark 在 TFIDF 上计算余弦相似度矩阵。 这是我的代码:

def cosSim(input: RDD[Seq[String]]) = {
  val hashingTF = new HashingTF()
  val tf = hashingTF.transform(input)
  tf.cache()
  val idf = new IDF().fit(tf)
  val tfidf = idf.transform(tf)
  val mat = new RowMatrix(tfidf)
  val sim = mat.columnSimilarities
  sim
}

我的输入大约有 3000 行,但如果我执行 sim.numRows() 或 sim.numCols(),我将看到 1048576 而不是 3K,据我所知,这是因为 val tfidf 和因此 val mat 的大小都是 3K * 1048576,其中 1048576 是 tf 特征的数量。也许要解决这个问题我必须转置垫子,但我不知道该怎么做。

你可以试试:

import org.apache.spark.mllib.linalg.distributed._

val irm = new IndexedRowMatrix(rowMatrix.rows.zipWithIndex.map {
   case (v, i) => IndexedRow(i, v)
})

irm.toCoordinateMatrix.transpose.toRowMatrix.columnSimilarities