在 Spark 中,从哈希映射创建数据帧,其中键作为列名称,值作为行

2024-04-16

我有一个数据框,我有一个列,它是数据框中的地图,如下所示 -

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(使用前将#替换为@)

在 Spark 中,从哈希映射创建数据帧,其中键作为列名称,值作为行 的相关文章

随机推荐