gpt4 book ai didi

dataframe - 将Pyspark Dataframe列从数组转换为新列

转载 作者:行者123 更新时间:2023-12-04 22:55:44 26 4
gpt4 key购买 nike

我有一个具有以下结构的Pyspark数据框:

root
|-- Id: string (nullable = true)
|-- Q: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- pr: string (nullable = true)
| | |-- qt: double (nullable = true)

类似于:
 +----+--------------------- ... --+
| Id | Q |
+----+---------------------- ... -+
| 001| [ [pr1,1.9], [pr3,2.0]...] |
| 002| [ [pr2,1.0], [pr9,3.9]...] |
| 003| [ [pr2,9.0], ... ] |
...

我希望将Q数组转换为列(名称pr值qt)。
我也想通过合并(添加)相同的列来避免重复的列。
 +----+-----+-----+------+ ... ----+
| Id | pr1 | pr2 | pr3 | ... prn |
+----+-----+-----+------+ ... ----+
| 001| 1.9 | 0.0 | 2.0 | ... |
| 002| 0.0 | 1.0 | 0 | ... |
| 003| 0.0 | 9.0 | ... | ... |
...

我如何执行此转换?
提前Thakyou !!
朱利安。

最佳答案

您可以结合使用explodepivot来做到这一点:

import pyspark.sql.functions as F

# explode to get "long" format
df=df.withColumn('exploded', F.explode('Q'))

# get the name and the name in separate columns
df=df.withColumn('name', F.col('exploded').getItem(0))
df=df.withColumn('value', F.col('exploded').getItem(1))

# now pivot
df.groupby('Id').pivot('name').agg(F.max('value')).na.fill(0)

关于dataframe - 将Pyspark Dataframe列从数组转换为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47874037/

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