使用spark将两个巨大的矩阵相乘

时间:2014-10-25 08:17:55

标签: matlab scala matrix apache-spark matrix-inverse

我目前正在学习火花。我想计算矩阵W,它被定义为 W=B*H'*inverse(R + H*B*H')这里每个变量都是一个矩阵和

  1. B = eb * eb'(eb'代表eb矢量的转置)[400000 * 400000]
  2. R = eo * eo'(eo'代表eb矢量的转置)[200000 * 200000]
  3. H是稀疏矩阵[200000 * 400000]
  4. 和eb矩阵大小是4000000 * 1所以我的B矩阵大小400000 * 400000现在问题是存储这个总文件我目前正在使用4GB RAM,500GB磁盘空间计算机。最初我是通过块乘法在matlab中完成的,我正在将输出写入文件,我的输出文件大小超过300GB。在使用spark完成之后需要花费很多时间,但是输出文件的大小相同。

    我已经使用这种方法matrix multiplication来乘以两个向量

    在计算B矩阵后,我无法计算B * H',因为它需要将它们存储在RAM中以乘以这两个矩阵。当我在代码上面运行时它会给出内存异常。有没有办法用有限的内存进行这种计算我的意思是将总数带入内存。以及如何计算大小的矩阵[200000 * 200000]的逆矩阵。

1 个答案:

答案 0 :(得分:1)

如果矩阵的几乎所有条目都为0,您可能需要考虑使用稀疏矩阵数据结构,仅存储主对角线和位置图到非零条目。