使用apache spark在TFIDF上的余弦相似性

时间:2016-11-12 18:10:54

标签: scala apache-spark apache-spark-mllib tf-idf cosine-similarity

我正在尝试使用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功能的数量。也许要解决我必须换位垫的问题,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

您可以尝试:

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