【发布时间】:2020-09-13 20:16:19
【问题描述】:
我正在寻找转换嵌套 JSON 并将其分解为新行。
当前数据:
+-----------+-----------+-----------------------------+
| id| site | sale|
+-----------------------------------------------------+
| abc| 6|{"2019-05-08T00:00:00": null, "2019-05-09T00:00:00": [{"key1": 2, "key2": 0}]} |
| def| 5|{"2019-05-08T00:00:00": [{"key1": 22, "key2": 10}], "2019-05-09T00:00:00": null} |
| ghi| 4|{"2019-05-08T00:00:00": null, "2019-05-09T00:00:00": null} |
想要的结果
+-----------+-----------+------------------------+-----------+-----------+
| id| site | saledate| key1| key2|
+-------------------------------------------------------------------------
| abc| 6| 2019-05-08T00:00:00| null| null|
| abc| 6| 2019-05-09T00:00:00| 2| 0|
| def| 5| 2019-05-08T00:00:00| 22| 10|
| def| 5| 2019-05-09T00:00:00| null| null|
| ghi| 4| 2019-05-08T00:00:00| null| null|
| ghi| 4| 2019-05-09T00:00:00| null| null|
我尝试过的:
-
explode仅适用于Array类型。
new_df = old_df.withColumn('saledate', explode('sale'))
- 我可以通过执行以下操作来获取每个日期的属性。但是,我必须分别指定每个日期,这并不理想。
new_df = old_df
.withColumn('sale_collection', explode('sale.2019-05-08T00:00:00'))
.withColumn('key1', col('sale_collection').getItem('key1')
.withColumn('key2', col('sale_collection').getItem('key2')
【问题讨论】:
标签: python dataframe apache-spark pyspark apache-spark-sql