0

これまでに、900万行と85K列の座標行列乗算に関する質問を掲載しました。 Errors for block matrix multiplification in SparkPySpark RDDスカラからPythonへのスパース行列の乗算

しかし、私はDataProcのメモリ不足の問題に遭遇しました。私は高いメモリコアを持つクラスタを構成しようとしましたが、運がありません。

私はこの記事を読んで、それは私の場合には役立つかもしれないと思っています: https://www.balabit.com/blog/scalable-sparse-matrix-multiplication-in-apache-spark/ しかし、彼らは提供ソリューションは、私は精通していないですスカラ座、です。このコードを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