gpt4 book ai didi

python - Pyspark 将 StructType 列聚合为每行元素的数组

转载 作者:行者123 更新时间:2023-12-01 07:47:27 28 4
gpt4 key购买 nike

我正在尝试做一些看起来非常简单的事情,但不知何故无法弄清楚如何使用 pyspark 做到这一点。

我有一个包含两列(为了简化)“id”和“strcol”的 df,可能有重复的 id

我想做一个 df.groupBy('id') ,它将为每个 id 返回一个 strcol 值的数组

简单的例子:

|--id--|--strCol--|
| a | {'a':1} |
| a | {'a':2} |
| b | {'b':3} |
| b | {'b':4} |
|------|----------|
would become
|--id--|-------aggsStr------|
| a | [{'a':1},{'a':2}] |
| b | [{'b':3},{'b':4}] |
|------|--------------------|

我尝试将 apply 与 pandas udf 一起使用,但它似乎拒绝返回数组。 (或者可能是我没有正确使用它)

最佳答案

您可以使用collect_list来自pyspark.sql.functions模块:

from pyspark.sql import functions as F
agg = df.groupby("id").agg(F.collect_list("strCol"))

一个功能齐全的示例:

import pandas as pd
from pyspark.sql import functions as F

data = {'id': ['a', 'a', 'b', 'b'], 'strCol': [{'a':1}, {'a':2}, {'b':3}, {'b':4}]}

df_aux = pd.DataFrame(data)

# df type: DataFrame[id: string, strCol: map<string,bigint>]
df = spark.createDataFrame(df_aux)


# agg type: # DataFrame[id: string, collect_list(strCol): array<map<string,bigint>>]
agg = df.groupby("id").agg(F.collect_list("strCol"))

希望这有帮助!

关于python - Pyspark 将 StructType 列聚合为每行元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397906/

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