我想执行一个大型矩阵乘法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,然后转换为任意一个
* EDIT浏览文档也很高兴发现IndexedRowMatrix函数columnSimilarities(),当目标是计算余弦相似度时,这可能是一个不错的选择。
我现在正在寻找本地解决方案。我有两台可用于原型制作的机器:16G RAM,10个CPU或64G RAM,28个CPU。一旦有了好的原型,就计划在群集上运行它。