Обновлен ответ. Улучшение в исходном ответе, поскольку я не использовал Row.
С вынужденным временем простоя, выполняя некоторые утилиты для паркинга и машинного обучения на заднем плане. Здесь идет акцент на Vector с количеством элементов> 1 и одинаковым количеством элементов во всех строках, что будет иметь смысл. И переименование cols.
Вы можете использовать этот пример сейчас:
%python
from pyspark.ml.linalg import Vectors
from pyspark.sql import Row
source_data = [
Row(city="AMS", temps=Vectors.dense([-1.0, -2.0, -3.0])),
Row(city="BRU", temps=Vectors.dense([-7.0, -7.0, -5.0])),
]
df = spark.createDataFrame(source_data)
def convertToCols(row):
return ( tuple(row.temps.toArray().tolist()))
df2 = df.rdd.map(convertToCols).toDF(["C1"])
df3 = df2.toDF(*(c.replace('_', 'C') for c in df2.columns))
df3.show()
возвращает:
+----+----+----+
| C1| C2| C3|
+----+----+----+
|-1.0|-2.0|-3.0|
|-7.0|-7.0|-5.0|
+----+----+----+
В моем примере важно использовать Row, поскольку он создавал DF in-line.