gpt4 book ai didi

python - 如何在 pyspark 数据框列中创建列表

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:04 25 4
gpt4 key购买 nike

我有一个数据框,其中包含以下数据:

df.show()

+-----+------+--------+
| id_A| idx_B| B_value|
+-----+------+--------+
| a| 0| 7|
| b| 0| 5|
| b| 2| 2|
+-----+------+--------+

假设 B 总共有 3 个可能的索引,我想创建一个表,将所有索引和值合并到一个列表(或 numpy 数组)中,如下所示:

final_df.show()

+-----+----------+
| id_A| B_values|
+-----+----------+
| a| [7, 0, 0]|
| b| [5, 0, 2]|
+-----+----------+

我已经成功走到这一步了:

from pyspark.sql import functions as f

temp_df = df.withColumn('B_tuple', f.struct(df['idx_B'], df['B_value']))\
.groupBy('id_A').agg(f.collect_list('B_tuple').alias('B_tuples'))
temp_df.show()

+-----+-----------------+
| id_A| B_tuples|
+-----+-----------------+
| a| [[0, 7]]|
| b| [[0, 5], [2, 2]]|
+-----+-----------------+

但现在我无法运行适当的 udf 函数将 temp_df 转换为 final_df

有更简单的方法吗?

如果不是,我应该使用什么函数来完成转换?

最佳答案

所以我找到了解决方案,

def create_vector(tuples_list, size):
my_list = [0] * size
for x in tuples_list:
my_list[x["idx_B"]] = x["B_value"]
return my_list

create_vector_udf = f.udf(create_vector, ArrayType(IntegerType()))

final_df = temp_df.with_column('B_values', create_vector_udf(temp_df['B_tuples'])).select(['id_A', 'B_values'])

final_df.show()

+-----+----------+
| id_A| B_values|
+-----+----------+
| a| [7, 0, 0]|
| b| [5, 0, 2]|
+-----+----------+

关于python - 如何在 pyspark 数据框列中创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698009/

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