Умножение двух СДР в писпарке - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в pyspark. Я пытался умножить два разреженных 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()

1 Ответ

0 голосов
/ 02 ноября 2019

Если вы все равно используете collect(), вы также можете использовать np.multiply () :

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()))
...