一尘不染

如何将嵌套的Struct列展开为多列?

python

我正在尝试将嵌套struct类型(请参见下文)的DataFrame列扩展为多列。我正在使用的Struct模式看起来像
{"foo": 3, "bar": {"baz": 2}}

理想情况下,我想将以上内容扩展为两列("foo"和"bar.baz")。然而,当我尝试使用.select("data.*")(这里data是该结构柱),我只得到列foobar,其中bar仍然是一个struct

有没有办法可以将Struct扩展到两层?


阅读 441

收藏
2021-01-20

共1个答案

一尘不染

您可以选择 data.bar.baz as bar.baz:

df.show()
+-------+
|   data|
+-------+
|[3,[2]]|
+-------+

df.printSchema()
root
 |-- data: struct (nullable = false)
 |    |-- foo: long (nullable = true)
 |    |-- bar: struct (nullable = false)
 |    |    |-- baz: long (nullable = true)

In pyspark:

import pyspark.sql.functions as F
df.select(F.col("data.foo").alias("foo"), F.col("data.bar.baz").alias("bar.baz")).show()
+---+-------+
|foo|bar.baz|
+---+-------+
|  3|      2|
+---+-------+
2021-01-20