В настоящее время я пытаюсь увеличить ранг RowMatrix
в PySpark с каждой итерацией в некотором алгоритме ML.В 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
Я исследовал функцию, генерирующую сообщение _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)
Все возвращенные переменные True
.Сможет ли кто-нибудь с большим опытом работы в PySpark предоставить руководство?Спасибо.