Писпарк конвертировать комплекс Dataformat - PullRequest
0 голосов
/ 29 ноября 2018

чтение файла паркета с помощью spark

df = spark.read.parquet("path_to_file")
df.show(2)

мой файл содержит

**Output**

+------+-----------------+
| col1 |       col2      |
+------+-----------------+
| "A1" |  {"x":1,"y":2}  |
+------+-----------------+
| "A2" |  {"z":3}        |
+------+-----------------+

Я хочу преобразовать фрейм данных в

+------+------+------+------+
| col1 |  x   |  y   |  z   |
+------+------+------+------+
| "A1" |  1   |  2   | Null |
+------+------+------+------+
| "A2" | Null | Null |  3   |
+------+------+------+------+

схему исходногодатафрейм показывает

DataFrame[col1: string, col2: string]

Я использую pyspark 2.3.2 на компьютере с Windows 7

1 Ответ

0 голосов
/ 29 ноября 2018

Это решение не совсем то, что вы просили, но, возможно, вы так не думали.Поэтому, пожалуйста, добавляйте комментарии, если они вас не устраивают.

> from pyspark.sql import functions as F
> from pyspark.sql.types import *

> df.show()
+----+-------------+
|col1|         col2|
+----+-------------+
|  A1|{"x":1,"y":2}|
|  A2|      {"z":3}|
+----+-------------+

> df.printSchema()
root
 |-- col1: string (nullable = true)
 |-- col2: string (nullable = true)

> df = df.withColumn(
..  "col2",
..  F.from_json("col2", MapType(StringType(),IntegerType()))
..)

> df.show()
+----+----------------+
|col1|            col2|
+----+----------------+
|  A1|[x -> 1, y -> 2]|
|  A2|        [z -> 3]|
+----+----------------+

> df.select(
..    "col1",
..    "col2.x",
..    "col2.y",
..    "col2.z",
..).show()
+----+----+----+----+
|col1|   x|   y|   z|
+----+----+----+----+
|  A1|   1|   2|null|
|  A2|null|null|   3|
+----+----+----+----+
...