Pyspark 基于RDD的py-spark矩阵乘法
我有两个矩阵Pyspark 基于RDD的py-spark矩阵乘法,pyspark,matrix-multiplication,Pyspark,Matrix Multiplication,我有两个矩阵 # 3x3 matrix X = [[10,7,3],[3 ,2,6],[5 ,8,7]] # 3x4 matrix Y = [[3,7,11,2],[2,7,4,10],[8,7,6,11]] 我想用RDD在spark中乘以这两个。谁能帮我一下吗。此乘法不应使用任何内置函数 我能够在python中使用for循环将2相乘,如下所示 for i in range(len(X)): # iterate through columns of Y
# 3x3 matrix
X = [[10,7,3],[3 ,2,6],[5 ,8,7]]
# 3x4 matrix
Y = [[3,7,11,2],[2,7,4,10],[8,7,6,11]]
我想用RDD在spark中乘以这两个。谁能帮我一下吗。此乘法不应使用任何内置函数
我能够在python中使用for循环将2相乘,如下所示
for i in range(len(X)):
# iterate through columns of Y
for j in range(len(Y[0])):
# iterate through rows of Y
for k in range(len(Y)):
Output[i][j] += X[i][k] * Y[k][j]
#output is a 3*4 empty matrix
对于范围内的i(len(X)):
#遍历Y列
对于范围内的j(len(Y[0]):
#遍历Y行
对于范围内的k(len(Y)):
输出[i][j]+=X[i][k]*Y[k][j]
#输出是一个3*4的空矩阵
我不熟悉spark和使用pyspark。您的代码可以工作,但您应该初始化输出,并且只初始化一次
Output=[[0]*4]*3
如果你不使用RDD,你的老师会不高兴的。这并不难,你只需要用不同的符号来写矩阵
X = [[10,7,3],[3 ,2,6],[5 ,8,7]]
可以写成
X = (0,0,10),(0,1,7),(0,2,3)...
rdd_x=sc.并行化((0,0,10),(0,1,7),(0,2,3)…)
rdd_y=sc.并行化((0,0,3)、(0,1,7)、(0,2,11)…)
现在可以使用join或cartesian进行乘法。
例如:
根据Andrea的回答,我提出了以下解决方案:
rdd_x.cartesian(rdd_y)\
.filter(lambda x: (x[0][1] == x[1][0]))\
.map(lambda x: ((x[0][0],x[1][1]),x[0][2] * x[1][2])).reduceByKey(lambda x,y: x+y).collect()
在2*2矩阵中,上述代码仅打印(0,0)和(1,1)值。如何获取(0,1)和(1,0)的值
rdd_x.cartesian(rdd_y)\
.filter(lambda x: (x[0][1] == x[1][0]))\
.map(lambda x: ((x[0][0],x[1][1]),x[0][2] * x[1][2])).reduceByKey(lambda x,y: x+y).collect()