pyspark中两个RDD的乘积



我是pyspark的新手。我一直在尝试将两个稀疏RDD相乘。我尝试的代码生成了两个稀疏矩阵,我写了一个函数来乘以两个RDD,但我认为这不是解决方案,因为计算不是并行进行的。有人能帮我吗?如何并行地乘以RDD?我在网站上尝试了很多资源,但没能找到解决方案。

import findspark
findspark.init()
import numpy as np
import pyspark
import random
from scipy.sparse import rand
sc = pyspark.SparkContext(appName="matrix")
np.random.seed(42)
n=4
x = rand(n, n, density=0.25)
y = rand(n, n, density=0.25)
A = x.A
B = y.A
rdd_x = sc.parallelize(A)
rdd_y = sc.parallelize(B)
def multiply(r1, r2):
A = r1.collect()
B = r2.collect()
result = []
for i in range(len(B[0])): 
total = 0
for j in range(len(A)): 
total += A[j] * B[j][i]
result.append(total)
return result
C = multiply(rdd_x,rdd_x)
print(C)
sc.stop()

如果您仍在使用collect(),您还可以使用np.multipy((:

C = np.multiply(np.array(rdd_x.collect()), np.array(rdd_y.collect()))

或者,如果你想要一个点积,你可以使用np.dot((:

C = np.dot(np.array(rdd_x.collect()), np.array(rdd_y.collect()))

最新更新