Python 在PySpark中乘以两个numpy矩阵

Python 在PySpark中乘以两个numpy矩阵,python,numpy,apache-spark,pyspark,Python,Numpy,Apache Spark,Pyspark,假设我有两个Numpy阵列: A = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024) B = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024) 我对它们执行以下操作: np.sum(np.dot(A, B)) 现在,我希望能够使用PySpark对相同的矩阵执行相同的计算,以便使用我的Spark集群实现分布式计算 有没有人知道或者有一个样本可以在PySpar

假设我有两个Numpy阵列:

A = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024)
B = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024)
我对它们执行以下操作:

np.sum(np.dot(A, B))
现在,我希望能够使用PySpark对相同的矩阵执行相同的计算,以便使用我的Spark集群实现分布式计算

有没有人知道或者有一个样本可以在PySpark中实现这些功能


非常感谢您的帮助

使用此方法中的
as_block_matrix
方法,您可以执行以下操作(但请参见@kennytm的评论,为什么对于较大的矩阵,此方法会比较慢):


使用本文中的
as_block_matrix
方法,您可以执行以下操作(但请参阅@kennytm的评论,为什么对于较大的矩阵,此方法会比较慢):


这似乎很有意义,但不幸的是,我无法将这一解决方案应用于我的问题。它似乎使用不同的库,是一个基于单词/文本的问题。那么你的矩阵是密集的还是稀疏的?A和B真的是1024×1024或更大吗?谢谢你的回复,肯尼特。A&B可以更大,但1024x1024应该适合我的测试。矩阵的大小真的不关我的事。此外,这些都是numpy数组,我相信它们可以很容易地转换为密集矩阵,所以如果需要的话,我可以这样做。看起来可能相关,但不幸的是,我无法将该解决方案应用于我的问题。它似乎使用不同的库,是一个基于单词/文本的问题。那么你的矩阵是密集的还是稀疏的?A和B真的是1024×1024或更大吗?谢谢你的回复,肯尼特。A&B可以更大,但1024x1024应该适合我的测试。矩阵的大小真的不关我的事。另外,这些是numpy数组,我相信它们可以很容易地转换成密集矩阵,所以如果需要的话,我可以这样做。
import numpy as np
from pyspark.mllib.linalg.distributed import RowMatrix
A = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024)
B = np.arange(1024 ** 2, dtype=np.float64).reshape(1024, 1024)

from pyspark.mllib.linalg.distributed import *

def as_block_matrix(rdd, rowsPerBlock=1024, colsPerBlock=1024):
    return IndexedRowMatrix(
        rdd.zipWithIndex().map(lambda xi: IndexedRow(xi[1], xi[0]))
    ).toBlockMatrix(rowsPerBlock, colsPerBlock)

matrixA = as_block_matrix(sc.parallelize(A))
matrixB = as_block_matrix(sc.parallelize(B))
product = matrixA.multiply(matrixB)