PySpark:向RowMatrix添加一列

时间:2019-05-19 17:23:35

标签: apache-spark matrix pyspark

我目前正在尝试通过某种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中有更多经验的人可以提供一些指导吗?谢谢。

0 个答案:

没有答案