gpt4 book ai didi

pyspark - 将大型数组列拆分为多个列 - Pyspark

转载 作者:行者123 更新时间:2023-12-02 16:08:22 28 4
gpt4 key购买 nike

我有:

+---+-------+-------+
| id| var1| var2|
+---+-------+-------+
| a|[1,2,3]|[1,2,3]|
| b|[2,3,4]|[2,3,4]|
+---+-------+-------+

我想要:

+---+-------+-------+-------+-------+-------+-------+
| id|var1[0]|var1[1]|var1[2]|var2[0]|var2[1]|var2[2]|
+---+-------+-------+-------+-------+-------+-------+
| a| 1| 2| 3| 1| 2| 3|
| b| 2| 3| 4| 2| 3| 4|
+---+-------+-------+-------+-------+-------+-------+

How to split a list to multiple columns in Pyspark?提供的解决方案

df1.select('id', df1.var1[0], df1.var1[1], ...).show()

可以工作,但我的一些数组非常长(最多 332)。

我该如何编写它才能考虑所有长度数组?

最佳答案

无论初始列数和数组大小如何,此解决方案都可以解决您的问题。此外,如果某列具有不同的数组大小(例如[1,2]、[3,4,5]),则会导致最大数量的空值列填补空白。

from pyspark.sql import functions as F

df = spark.createDataFrame(sc.parallelize([['a', [1,2,3], [1,2,3]], ['b', [2,3,4], [2,3,4]]]), ["id", "var1", "var2"])

columns = df.drop('id').columns
df_sizes = df.select(*[F.size(col).alias(col) for col in columns])
df_max = df_sizes.agg(*[F.max(col).alias(col) for col in columns])
max_dict = df_max.collect()[0].asDict()

df_result = df.select('id', *[df[col][i] for col in columns for i in range(max_dict[col])])
df_result.show()
>>>
+---+-------+-------+-------+-------+-------+-------+
| id|var1[0]|var1[1]|var1[2]|var2[0]|var2[1]|var2[2]|
+---+-------+-------+-------+-------+-------+-------+
| a| 1| 2| 3| 1| 2| 3|
| b| 2| 3| 4| 2| 3| 4|
+---+-------+-------+-------+-------+-------+-------+

关于pyspark - 将大型数组列拆分为多个列 - Pyspark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51648313/

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