Преобразование / преобразование StructType, ArrayType в StringType (однозначное значение) с использованием pyspark - PullRequest
0 голосов
/ 09 июля 2020

Один из моих Dataframe (spark. sql) имеет эту схему.

root
 |-- ValueA: string (nullable = true)
 |-- ValueB: struct (nullable = true)
 |    |-- abc: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- a0: string (nullable = true)
 |    |    |    |-- a1: string (nullable = true)
 |    |    |    |-- a2: string (nullable = true)
 |    |    |    |-- a3: string (nullable = true)
 |-- ValueC: struct (nullable = true)
 |    |-- pqr: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- info1: string (nullable = true)
 |    |    |    |-- info2: struct (nullable = true)
 |    |    |    |    |-- x1: long (nullable = true)
 |    |    |    |    |-- x2: long (nullable = true)
 |    |    |    |    |-- x3: string (nullable = true)
 |    |    |    |-- info3: string (nullable = true)
 |    |    |    |-- info4: string (nullable = true)
 |-- Value4: struct (nullable = true)
 |    |-- xyz: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- b0: string (nullable = true)
 |    |    |    |-- b2: string (nullable = true)
 |    |    |    |-- b3: string (nullable = true)
 |-- Value5: string (nullable = true)

Мне нужно сохранить это в файл CSV, но без использования какого-либо сглаживания, взорвать в формате ниже.

 |-- ValueA: string (nullable = true)
 |-- ValueB: struct (nullable = true)
 |-- ValueC: struct (nullable = true)
 |-- ValueD: struct (nullable = true)
 |-- ValueE: string (nullable = true)

Я напрямую использовал команду [df.to_pandas().to_csv("output.csv")], это служит моей цели, но мне нужен лучший подход. Я использую pyspark

1 Ответ

1 голос
/ 09 июля 2020

В формате Spark запись csv еще не поддерживает запись struct/array..etc сложных типов.

Write as Parquet file:

Лучше писать в Spark как формат parquet, как формат паркета поддерживает все nested data types и обеспечивает лучшую производительность при чтении / записи.

df.write.parquet("<path>")

Write as Json file:

Если допускается запись в формате json, тогда

df.write.json("path")
#or
df.toJSON().saveAsTextFile("path")

Write as CSV file:

Используйте to_json функцию, которая преобразует json struct/Array в string и сохранить в формате csv.

df.selectExpr("valueA","to_json(ValueB)"..etc).write.csv("path")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...