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からわかる内容に応じて、これは高価である間に多くの変換が含まれています
大規模な分散格納するのに適切なフォーマットを選択することが非常に重要です行列。分散行列を別の形式に変換するには、グローバルシャッフルが必要になりますが、これはかなり高価です。
誰かが詳しく説明しますか。