【发布时间】:2017-08-08 03:44:51
【问题描述】:
假设我有一个如下所示的数据框:
+--------------------+--------------------+--------------------------------------------------------------+
| id | Name | Payment|
+--------------------+--------------------+--------------------------------------------------------------+
| 1 | James |[ {"@id": 1, "currency":"GBP"},{"@id": 2, "currency": "USD"} ]|
+--------------------+--------------------+--------------------------------------------------------------+
架构是:
根
|-- id: integer (nullable = true)
|-- Name: string (nullable = true)
|-- Payment: string (nullable = true)
我怎样才能把上面的 JSON 数组分解成下面的:
+--------------------+--------------------+-------------------------------+
| id | Name | Payment|
+--------------------+--------------------+-------------------------------+
| 1 | James | {"@id":1, "currency":"GBP"} |
+--------------------+--------------------+-------------------------------+
| 1 | James | {"@id":2, "currency":"USD"} |
+--------------------+--------------------+-------------------------------+
我一直在尝试使用如下所示的分解功能,但它不起作用。它给出了一个关于无法分解字符串类型的错误,并且它需要一个映射或数组。这是有道理的,因为架构表示它是一个字符串,而不是数组/映射,但我不确定如何将其转换为适当的格式。
val newDF = dataframe.withColumn("nestedPayment", explode(dataframe.col("Payment")))
非常感谢任何帮助!
【问题讨论】:
标签: json scala apache-spark dataframe apache-spark-sql