pyspark从不同大小的矩阵创建BlockMatrix

时间:2019-01-13 04:46:05

标签: apache-spark pyspark rdd

我正在尝试构建一个BlockMatrix,

+---+---+---+---+
|7.0|6.0|3.0|0.0|
|3.0|2.0|5.0|1.0|
|9.0|4.0|0.0|3.0|
+---+---+---+---+
三个子矩阵中的

+---+---+
|7.0|6.0|
|3.0|2.0|
+---+---+

+---+---+
|9.0|4.0|
+---+---+

+---+---+
|3.0|0.0|
|5.0|1.0|
|0.0|3.0|
+---+---+

这是我的代码。

from pyspark.mllib.linalg import Matrices
from pyspark.mllib.linalg.distributed import BlockMatrix
blocks = sc.parallelize([(0, 0, Matrices.dense(2, 2, [7,3,6,2])),
                         (2, 0, Matrices.dense(1, 2, [9,4])),
                         (0, 2, Matrices.dense(3, 2, [3.0, 5.0, 0.0, 0.0, 1.0, 3.0]))
                        ])
blockM = BlockMatrix(blocks, 2, 2)

但是我收到错误消息“ TypeError:无法将类型转换为子矩阵块元组”。知道我在哪里错吗?如何理解这种blockMatrix类型?谢谢!

1 个答案:

答案 0 :(得分:0)

TL; DR 您可以直接从此类输入创建BlockMatrix

BlockMatrix是常规结构-BlockMatrix中的所有块都必须具有相同的最大大小。此外,行和列的总数必须分别乘以一个块中的行和列数。

但是单个矩阵可以小于该块-在这种情况下,数据将占据该块的右上角。

您必须重组数据以符合这些条件。