gpt4 book ai didi

python - 将 map /字典的 Spark Dataframe 列展平为多个列

转载 作者:行者123 更新时间:2023-12-05 04:07:04 24 4
gpt4 key购买 nike

我们有一个看起来像这样的 DataFrame:

DataFrame[event: string, properties: map<string,string>]

请注意,有两列:eventproperties。我们如何根据 map 中的键值将 properties 列拆分或展平为多个列?


我注意到我可以做这样的事情:

newDf = df.withColumn("foo", col("properties")["foo"])

产生一个 Dataframe

DataFrame[event: string, properties: map<string,string>, foo: String]

但是我必须对所有的键一个一个地做这些。有没有办法自动完成它们?比如properties中有foo, bar, baz作为key,我们能不能把 map :

DataFrame[event: string, foo: String, bar: String, baz: String]

最佳答案

您可以使用 explode() 函数 - 它通过为每个条目创建两个额外的列 - keyvalue 来展平 map :

>>> df.printSchema()
root
|-- event: string (nullable = true)
|-- properties: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)

>>> df.select('event', explode('properties')).printSchema()
root
|-- event: string (nullable = true)
|-- key: string (nullable = false)
|-- value: string (nullable = true)

如果您有一个可以作为分组依据的具有唯一值的列,则可以使用数据透视表。例如:

df.withColumn('id', monotonically_increasing_id()) \
.select('id', 'event', explode('properties')) \
.groupBy('id', 'event').pivot('key').agg(first('value'))

关于python - 将 map /字典的 Spark Dataframe 列展平为多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48993176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com