0

我以前發佈過一個關於900萬行和85K列座標矩陣乘法的問題。 Errors for block matrix multiplification in SparkPySpark RDD從scala到python的稀疏矩陣乘法

但是,我在DataProc上遇到了內存不足問題。我試圖配置高內存核心的羣集,但沒有運氣。

我讀這篇文章,並認爲這可能會在我的情況有所幫助: https://www.balabit.com/blog/scalable-sparse-matrix-multiplication-in-apache-spark/ 但是,他們提供的解決方案是Scala,這我不熟悉。有人可以將這段代碼翻譯成python嗎?謝謝一堆!

def coordinateMatrixMultiply(leftMatrix: CoordinateMatrix, rightMatrix: CoordinateMatrix): 
    CoordinateMatrix = { 
    val M_ = leftMatrix.entries.map({ case MatrixEntry(i, j, v) => (j, (i, v)) }) 
    val N_ = rightMatrix.entries.map({ case MatrixEntry(j, k, w) => (j, (k, w)) }) 

    val productEntries = M_ 
    .join(N_) 
    .map({ case (_, ((i, v), (k, w))) => ((i, k), (v * w)) }) 
    .reduceByKey(_ + _) 
    .map({ case ((i, k), sum) => MatrixEntry(i, k, sum) }) 

    new CoordinateMatrix(productEntries) 
} 

回答

0

快爲好,只是需要轉換爲RDD插頭前英寸

def coordinateMatrixMultiply(leftmatrix, rightmatrix): 
     left = leftmatrix.map(lambda (i, j, v): (j, (i, v))) 
     right = rightmatrix.map(lambda (j, k, w): (j, (k, w))) 
     productEntries = left \ 
         .join(right) \ 
         .map(lambda (x, ((i, v), (k, w))): ((i, k), (v * w))) \ 
         .reduceByKey(lambda x,y: x+y) \ 
         .map(lambda ((i, k), sum): (i, k, sum)) 
     return productEntries