2016-03-28 4 views
2

でRowMatrix.columnSimilaritiesを使用した後、私は、文書の類似度を算出する必要があるの私のプロジェクトの一つのためのスパークmllibを使用しています。印刷CoordinateMatrix Apacheのスパーク

Iは、第RowMatrixにそれを変換しcolumnSimilarities()メソッドを用い、その後、TF-IDFはmllibの変換を用いてベクターに文書を変換します。

私はtf-idfのドキュメントを参照し、コサイン類似点についてDIMSUM実装を使用。スパーク・シェルで

これはScalaのコードでは、実行されます。

import org.apache.spark.rdd.RDD 
import org.apache.spark.SparkContext 
import org.apache.spark.mllib.feature.HashingTF 
import org.apache.spark.mllib.linalg.Vector 
import org.apache.spark.mllib.feature.IDF 
import org.apache.spark.mllib.linalg.distributed.RowMatrix 

val documents = sc.textFile("test1").map(_.split(" ").toSeq) 
val hashingTF = new HashingTF() 

val tf = hashingTF.transform(documents) 
tf.cache() 

val idf = new IDF().fit(tf) 
val tfidf = idf.transform(tf) 

// now use the RowMatrix to compute cosineSimilarities 
// which implements DIMSUM algorithm 

val mat = new RowMatrix(tfidf) 
val sim = mat.columnSimilarities() // returns a CoordinateMatrix 

それでは、このコードブロックでは、私のinput filetest1は5つの短い文書(10未満項各)との単純なファイルであるとしましょう、各行に1つ

私はこのコードをテストしているので、オブジェクトsimにあるmat.columnSimilarities()の出力を見たいと思います。 1番目の文書ベクトルの2番目、3番目などの類似点を見たいと思います。

IはRowMatrixクラスのcolumnSimilaritiesメソッドによって返されるとsimによって参照されるオブジェクトのタイプがあるCoordinateMatrixためdocumentationスパークと呼ばれます。

詳細なドキュメントを読むことで、CoordinateMatrixをRowMatrixに変換し、次にRowMatrixの行を配列に変換してからprintln(sim.toRowMatrix().rows.toArray().mkString("\n"))のように印刷できると考えました。

しかし、それは私が理解できないいくつかの出力を与えます。

誰でも手助けできますか?どんな種類のリソースリンクなども大いに役立ちます!

ありがとうございます!

+0

はあなたが入れ替わっていることが確認されていることを確認してください呼び出すことができる要素を取得するには、マトリックス形式

val transformedRDD = sim.entries.map{case MatrixEntry(row: Long, col:Long, sim:Double) => Array(row,col,sim).mkString(",")} 

行に変換するには、次の、何の必要性を試すことはできませんtdif RowMatrix –

答えて

2

あなたは、次のアクション

transformedRDD.collect() 
+0

ありがとう...私はこれを試してみましょう! – pranav3688

+0

transformedRDD.saveAsTextFile( "...")を実行して出力ファイルを開くと、複数のトリプレットが表示されます。私はこれらの三つ子が何であるか分かりません! pranav3688トリプレット@ – pranav3688

+0

はcolumnSimilaritiesの出力(それは行番号、列IDのフォーマット及びそれらOK –