PySpark: добавление столбца в RowMatrix - PullRequest
1 голос
/ 19 мая 2019

В настоящее время я пытаюсь увеличить ранг 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 предоставить руководство?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...