Чтобы решить мою проблему через два дня, я нашел решение. В стеке два поста, которые не дали эффективного решения.
1 - Первый применил эту функцию udf для преобразования данных.
function
from pyspark.sql import functions as F
from pyspark.sql import types as T
from pyspark.ml.linalg import SparseVector, DenseVector
def sparse_to_array(v):
v = DenseVector(v)
new_array = list([float(x) for x in v])
return new_array
sparse_to_array_udf = F.udf(sparse_to_array, T.ArrayType(T.FloatType()))
2 - Затем примените его к данным.
# convert
df = pcaFeatures.withColumn('features_array', sparse_to_array_udf('features'))
Тогда Если вы хотите преобразовать эту матрицу в Vector pleas посетите этот сайт. Преобразовать в вектор , поскольку после этого шага вы можете получить разреженную матрицу, а не вектор, тогда вы получите эту ошибку (ниже) на PCA или другой при подборе / преобразовании данных.
IllegalArgumentException: 'требование не выполнено: столбец pcaFeatures_Norm должен иметь тип struct, values: array>, но фактически был массивом.'