哪种pyspark抽象适合我的大型矩阵乘法?

时间:2019-05-24 18:08:40

标签: python apache-spark pyspark sparse-matrix cosine-similarity

我想执行一个大型矩阵乘法C = A * BT ,然后通过应用严格的阈值并收集表单列表(行索引,列索引,值)来过滤C。< / p>

A和B稀疏,条目几乎为零。它们最初表示为稀疏的csr矩阵。

矩阵的大小(采用密集格式时):
A:9G(900,000 x 1200)
B:6.75G(700,000 x 1200)
C,阈值之前:5000G
C,阈值后:0.5G

使用pyspark,您希望哪种策略在此效率最高?我应该使用哪个抽象来并行化A和B?我还应该考虑如何优化分区大小?


我应该坚持使用稀疏的稀疏矩阵对象并将其简单地并行化为RDD(也许通过一些自定义序列化)吗?

我应该使用DataFrame存储A和B矩阵的非零条目,然后在执行器上将它们转换为本地pyspark矩阵类型吗?

我应该使用MLlib的DistributedMatrix抽象吗?对于这种策略,我想我先将scipy csr矩阵转换为coo格式,然后创建pyspark CoordinateMatrix,然后转换为任意一个

  1. BlockMatrix?密集表示,但允许与另一个分布式BlockMatrix进行矩阵乘法。
  2. IndexedRowMatrix?稀疏表示,但仅允许与本地矩阵(例如广播的SparseMatrix吗?)相乘

* EDIT浏览文档也很高兴发现IndexedRowMatrix函数columnSimilarities(),当目标是计算余弦相似度时,这可能是一个不错的选择。


我现在正在寻找本地解决方案。我有两台可用于原型制作的机器:16G RAM,10个CPU或64G RAM,28个CPU。一旦有了好的原型,就计划在群集上运行它。

0 个答案:

没有答案