Tôi đang cố gắng nhân ma trận bằng cách sử dụng Apache Spark và Python.Phép nhân Spark Matrix với python
Đây là dữ liệu của tôi
from pyspark.mllib.linalg.distributed import RowMatrix
RDD của tôi về vectơ
rows_1 = sc.parallelize([[1, 2], [4, 5], [7, 8]])
rows_2 = sc.parallelize([[1, 2], [4, 5]])
maxtrix My
mat1 = RowMatrix(rows_1)
mat2 = RowMatrix(rows_2)
Tôi muốn làm điều gì đó như thế này:
mat = mat1 * mat2
Tôi đã viết một hàm để xử lý phép nhân ma trận nhưng tôi sợ phải có thời gian xử lý dài. Đây là chức năng của tôi:
def matrix_multiply(df1, df2):
nb_row = df1.count()
mat=[]
for i in range(0, nb_row):
row=list(df1.filter(df1['index']==i).take(1)[0])
row_out = []
for r in range(0, len(row)):
r_value = 0
col = df2.select(df2[list_col[r]]).collect()
col = [list(c)[0] for c in col]
for c in range(0, len(col)):
r_value += row[c] * col[c]
row_out.append(r_value)
mat.append(row_out)
return mat
Chức năng của tôi tạo ra nhiều hành động tia lửa (lấy, thu thập, v.v.). Liệu chức năng sẽ mất rất nhiều thời gian xử lý? Nếu ai đó có ý tưởng khác, nó sẽ hữu ích cho tôi.
Cảm ơn câu trả lời của bạn. Nhưng nó không có tác dụng với tôi. Tôi đang sử dụng Spark 1.5.0. Đây là thông báo lỗi: ** AttributeError: đối tượng 'BlockMatrix' không có thuộc tính 'nhân' ** – Raouf
Nó đã được giới thiệu trong 1.6. – zero323
Ok tôi hiểu rồi. Tôi tạo ra một chức năng để xử lý nó (xem bài viết ở trên). – Raouf