我正在尝试将嵌套struct类型(请参见下文)的DataFrame列扩展为多列。我正在使用的Struct模式看起来像 {"foo": 3, "bar": {"baz": 2}}。
{"foo": 3, "bar": {"baz": 2}}
理想情况下,我想将以上内容扩展为两列("foo"和"bar.baz")。然而,当我尝试使用.select("data.*")(这里data是该结构柱),我只得到列foo和bar,其中bar仍然是一个struct。
("foo"和"bar.baz")
.select("data.*")
foo
bar
struct
有没有办法可以将Struct扩展到两层?
您可以选择 data.bar.baz as bar.baz:
data.bar.baz
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| +---+-------+