我之前发布了一个关于坐标矩阵乘法的问题,有900万行和85K列。 Errors for block matrix multiplification in Spark
但是,我在DataProc上遇到了Out of Memory问题。我试图配置具有高内存核心的集群,但没有运气。
我正在阅读这篇文章并认为它可能有助于我的情况: 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 :(得分: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
答案 1 :(得分:0)
SetWindowLong(window, GWL_USERDATA, (LONG)ptr); // Not going to work on 64bit
SetWindowLong(window, GWL_USERDATA, (uintptr_t)ptr); // Still not going to work
SetWindowLongPtr(window, GWL_USERDATA, (LONG_PTR)ptr); // works on 32bit and 64bit
函数中没有元组解包,因此我们必须通过单个变量lambda
来引用MatrixEntry
。e
不可索引,因此我们必须调用各个属性MatrixEntry
,i
和j
。value