1

Qはスパークで配布行マトリックスとする、私はその転置Q'Qの外積を計算します。Apache Sparkで2つの分散RowMatrixの内積を計算するには?

ただし、行行列にはmultiply()メソッドがありますが、引数としてローカル行列のみを受け入れることができます。

コードイラスト(スカラ):私はRowMatrixローカル一つと分散ではない分散 のドット積を実行する

val phi = new RowMatrix(phiRDD)   // phiRDD is an instance of RDD[Vector] 
val phiTranspose = transposeRowMatrix(phi) // transposeRowMatrix() 
              // returns the transpose of a RowMatrix 
val crossMat = ?       // phi * phiTranspose 

注意。

一つの解決策は、以下のようIndexedRowMatrixを使用することです。しかし、私は、このようなtallSkinnyQR()として行マトリックス・メソッドを使用すると、これは私が使用して、RowMatrixにcrossMat変換sholudことを意味

val phi = new IndexedRowMatrix(phiRDD) // phiRDD is an instance of RDD[IndexedRow] 
val phiTranspose = transposeMatrix(phi) // transposeMatrix() 
             // returns the transpose of a Matrix 
val crossMat = phi.toBlockMatrix().multiply(phiTranspose.toBlockMatrix() 
              ).toIndexedRowMatrix() 

.toRowMatrix()方法:

val crossRowMat = crossMat.toRowMatrix() 

と最終的に私は

を適用することができます

crossRowMat.tallSkinnyQR() 
が、このプロセスは、分散行列の種類と私はMLlib Programming Guideからわかる内容に応じて、これは高価である間に多くの変換が含まれています

大規模な分散格納するのに適切なフォーマットを選択することが非常に重要です行列。分散行列を別の形式に変換するには、グローバルシャッフルが必要になりますが、これはかなり高価です。

誰かが詳しく説明しますか。

答えて

関連する問題