我目前正在尝试通过某种ML算法中的每次迭代来增加PySpark中RowMatrix
的等级。我无法在Pyspark docs中找到任何将列附加到RowMatrix
的方法。
但是,我确实注意到BlockMatrix
类具有add
方法,因此我尝试将矩阵转换为该类,然后使用add
,如下所示:
A = SparkUtils.produce_random_row_matrix(spark_session, A_rows, rank)
B = SparkUtils.produce_random_row_matrix(spark_session, B_rows, rank)
A.toBlockMatrix(rowsPerBlock=A.numRows(), colsPerBlock=A.numCols())
B.toBlockMatrix(rowsPerBlock=B.numRows(), colsPerBlock=B.numCols())
A_new_vector = BlockMatrix(spark_session.parallelize([((0, 0), Matrices.rand(A.numRows(), 1))]))
B_new_vector = BlockMatrix(spark_session.parallelize([((0, 0), Matrices.rand(B.numRows(), 1))]))
A = A.add(A_new_vector)
B = B.add(B_new_vector)
但是,代码给了我以下错误:
TypeError: Cannot convert type <class 'tuple'> into a sub-matrix block tuple
我研究了在source code中产生消息_convert_to_matrix_block_tuple
的函数,并发现运行了以下测试以确认if
语句中的所有条件均得到满足:>
elem = ((0, 0), Matrices.dense(A.numRows(), 1,
np.random.rand(A.numRows())))
length_filter = len(elem) == 2
type_filter = isinstance(elem, tuple)
first_type_filter = isinstance(elem[0], tuple)
first_length_filter = len(elem[0]) == 2
second_type_filter = isinstance(elem[1], Matrix)
所有var返回True
。在PySpark中有更多经验的人可以提供一些指导吗?谢谢。