1

我試圖計算的TFIDF餘弦相似矩陣,使用Apache的火花。 這裏是我的代碼:餘弦相似度使用Apache火花

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特徵的數量。也許要解決我必須轉移的問題,但我不知道該怎麼做。

回答

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 
+0

謝謝工程。 –

+0

你可以分享一下PySpark版本嗎?我創建了IDF模型並希望找到餘弦相似性。 –