Преобразование схемы Spark DataFrame в другой DataFrame

У меня есть Spark DataFrame в PySpark, и я хочу сохранить его схему в другой Spark DataFrame.

Например: у меня есть образец DataFrame df, который выглядит так:

+---+-------------------+
| id|                  v|
+---+-------------------+
|  0| 0.4707538108432022|
|  0|0.39170676690905415|
|  0| 0.8249512619546295|
|  0| 0.3366111661094958|
|  0| 0.8974360488327017|
+---+-------------------+

Я могу просмотреть схему df, выполнив -

df.printSchema()

root
 |-- id: integer (nullable = true)
 |-- v: double (nullable = false)

Мне нужен DataFrame, который отображает вышеуказанную информацию о df в двух столбцах col_name и dtype.

Ожидаемый результат:

+---------+-------------------+
| col_name|              dtype|
+---------+-------------------+
|       id|            integer|
|        v|             double|
+---------+-------------------+

Как мне этого добиться? Я ничего не могу найти по этому поводу. Спасибо.


person K. K.    schedule 23.10.2019    source источник
comment
распараллелить df.dtypes   -  person pault    schedule 23.10.2019
comment
Я получил желаемый результат с помощью spark.createDataFrame(df.dtypes, [col_name, dtypes]). Спасибо. Что вы подразумеваете под параллелизацией?   -  person K. K.    schedule 23.10.2019


Ответы (1)


Проще всего было бы создать кадр данных из df.dtypes:

spark.createDataFrame(df.dtypes, ["col_name", "dtype"]).show()
#+--------+------+
#|col_name| dtype|
#+--------+------+
#|      id|   int|
#|       v|double|
#+--------+------+

Но если вы хотите, чтобы столбец dtype был таким, как показано в printSchema, вы можете сделать это с помощью df.schema

spark.createDataFrame(
    [(d['name'], d['type']) for d in df.schema.jsonValue()['fields']],
    ["col_name", "dtype"]
).show()
#+--------+-------+
#|col_name|  dtype|
#+--------+-------+
#|      id|integer|
#|       v| double|
#+--------+-------+
person pault    schedule 23.10.2019