讓Q
是一個分佈式的行矩陣中的星火,我想計算的Q
跨產品與它的轉Q'
。如何計算Apache Spark中兩個分佈式RowMatrix的點積?
儘管行矩陣確實有一個multiply()
方法,但它只能接受局部矩陣作爲參數。
碼圖(斯卡拉):
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
注意,我想執行分佈式RowMatrix的 點積不是分佈式一個與當地的一個。
一種解決方案是使用一個IndexedRowMatrix
如下:
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()
然而,我要使用的行矩陣的方法,例如tallSkinnyQR()
並且這意味着我sholud變換crossMat
到RowMatrix,使用.toRowMatrix()
方法:
val crossRowMat = crossMat.toRowMatrix()
終於我可以申請
crossRowMat.tallSkinnyQR()
但這個過程包括各類分佈式矩陣,並根據我從MLlib Programming Guide明白這是昂貴之間的許多變革:
選擇合適的格式存儲大和分佈是非常重要的矩陣。將分佈式矩陣轉換爲不同的格式可能需要全局洗牌,這非常昂貴。
請問有人詳細說明。
請您檢查我的更新版本。 – user8547317