我有一个数据框,我有一个列,它是数据框中的地图,如下所示 -
scala> df.printSchema
root
|-- A1: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
我需要从数据框中选择所有键作为列名,将值作为行。
例如:
假设我有 2 个这样的记录 -
1. key1 -> value1, key2 -> value2, key3 -> value3 ....
2. key1 -> value11, key3 -> value13, key4 -> value14 ...
我想要输出数据帧为
key1 key2 key3 key4
value1 value2 value3 null
value11 null value13 value14
我怎样才能做到这一点?
首先我们需要创建一个id
我们可以根据该列对数据进行分组,然后explode
地图栏A1
,最后重塑你的df
using pivot()
:
import org.apache.spark.sql.functions.{monotonically_increasing_id, explode, first}
df.withColumn("id", (monotonically_increasing_id()))
.select($"id", explode($"A1"))
.groupBy("id")
.pivot("key")
.agg(first("value")).show()
+---+-------+------+-------+-------+
| id| key1| key2| key3| key4|
+---+-------+------+-------+-------+
| 0| value1|value2| value3| null|
| 1|value11| null|value13|value14|
+---+-------+------+-------+-------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)