Сначала я попробовал все по ссылке ниже, чтобы исправить мою ошибку, но ни одна из них не сработала.
Как преобразовать RDD плотного вектора в DataFrame в pyspark?
Я пытаюсь преобразовать плотный вектор в информационный кадр (желательно Spark) вместе с именами столбцов и столкнуться с проблемами.
Мой столбец в искровом информационном кадре - это вектор, который был создан с использованием Vector Assembler, и теперь я хочупреобразовать его обратно в фрейм данных, так как я хотел бы создать графики для некоторых переменных в векторе.
Подход 1:
from pyspark.ml.linalg import SparseVector, DenseVector
from pyspark.ml.linalg import Vectors
temp=output.select("all_features")
temp.rdd.map(
lambda row: (DenseVector(row[0].toArray()))
).toDF()
Ниже приведена ошибка
TypeError: not supported type: <type 'numpy.ndarray'>
Подход 2:
from pyspark.ml.linalg import VectorUDT
from pyspark.sql.functions import udf
from pyspark.ml.linalg import *
as_ml = udf(lambda v: v.asML() if v is not None else None, VectorUDT())
result = output.withColumn("all_features", as_ml("all_features"))
result.head(5)
Ошибка:
AttributeError: 'numpy.ndarray' object has no attribute 'asML'
Я также пытался преобразовать фрейм данных в фрейм данных Pandas, и после этого я не могу разбить значения на отдельные столбцы
Подход 3:
pandas_df=temp.toPandas()
pandas_df1=pd.DataFrame(pandas_df.all_features.values.tolist())
Выше кода выполняетсяхорошо, но у меня все еще есть только один столбец в моем фрейме данных со всеми значениями, разделенными запятыми в виде списка.
Любая помощь очень ценится!
РЕДАКТИРОВАТЬ:
Воткак выглядит мой временный таймфреймУ него только один столбец all_features.Я пытаюсь создать фрейм данных, который разбивает все эти значения на отдельные столбцы (all_features - это вектор, созданный с использованием 200 столбцов)
+--------------------+
| all_features|
+--------------------+
|[0.01193689934723...|
|[0.04774759738895...|
|[0.0,0.0,0.194417...|
|[0.02387379869447...|
|[1.89796699621085...|
+--------------------+
only showing top 5 rows
Ожидаемый результат - это кадр данных со всеми 200 столбцами, выделенными вdataframe
+----------------------------+
| col1| col2| col3|...
+----------------------------+
|0.01193689934723|0.0|0.5049431301173817...
|0.04774759738895|0.0|0.1657316216149636...
|0.0|0.0|7.213126372469...
|0.02387379869447|0.0|0.1866693496827619|...
|1.89796699621085|0.0|0.3192169213385746|...
+----------------------------+
only showing top 5 rows
Вот как выглядит мой вывод Pandas DF
0
0 [0.011936899347238104, 0.0, 0.5049431301173817...
1 [0.047747597388952415, 0.0, 0.1657316216149636...
2 [0.0, 0.0, 0.19441761495525278, 7.213126372469...
3 [0.023873798694476207, 0.0, 0.1866693496827619...
4 [1.8979669962108585, 0.0, 0.3192169213385746, ...