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

2024-01-25

我想执行大型矩阵乘法 C = A * B.T然后通过应用严格的阈值来过滤 C,收集形式为(行索引、列索引、值)的列表。

A 和 B 很稀疏,条目大多为零。它们最初表示为稀疏 scipy csr 矩阵。

矩阵的大小(当它们是密集格式时):
答:9G(900,000 x 1200)
B:6.75G(700,000×1200)
C、阈值处理前:5000G
C、阈值处理后:0.5G

使用 pyspark,您认为什么策略在这里最有效?我应该使用哪个抽象来并行化 A 和 B?我还应该考虑什么来优化分区大小?


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

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

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

  1. 块矩阵?密集表示,但允许与另一个分布式 BlockMatrix 进行矩阵乘法。
  2. 索引行矩阵?稀疏表示,但只允许与局部矩阵相乘(例如广播 SparseMatrix ?)

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


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


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐