如何在 Pyspark 中使用 groupby 和数组元素?

Posted

技术标签:

【中文标题】如何在 Pyspark 中使用 groupby 和数组元素?【英文标题】:How to use groupby with array elements in Pyspark? 【发布时间】:2020-02-25 08:08:50 【问题描述】:

我正在 Pyspark 中的数据帧上运行 groupBy 操作,我需要对可能包含一个或两个功能的列表进行分组。我该如何执行此操作?

 record_fields = [['record_edu_desc'], ['record_construction_desc'],['record_cost_grp'],['record_bsmnt_typ_grp_desc'], ['record_shape_desc'],
['record_sqft_dec_grp', 'record_renter_grp_c_flag'],['record_home_age'],
['record_home_age_grp','record_home_age_missing']]


for field in record_fields: 
    df_group = df.groupBy('year', 'area', 'state', 'code', field).sum('net_contributions')
    ### df write to csv operation

我的第一个想法是创建一个列表列表并将其传递给 groupby 操作,但我收到以下错误:

TypeError:参数无效,不是字符串或列: ['record_edu_desc'] 类型。对于列字面量,请使用“lit”、“array”、“struct”或“create_map”函数。

我该如何进行这项工作?我愿意接受其他可以做到这一点的方式。

【问题讨论】:

你想对record_fields字段中的所有列名以及状态、年份、代码等进行分组吗? 是的,但是一次只有一个元素的循环 【参考方案1】:

试试这个(注意* [星号] 在field 之前):

for field in record_fields: 
    df_group = df.groupBy('year', 'area', 'state', 'code', *field).sum('net_contributions')

还可以查看question 以了解有关 python 中星号的更多信息。

【讨论】:

以上是关于如何在 Pyspark 中使用 groupby 和数组元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyspark 中应用 groupby 和 transpose?

如何使用 groupby 和聚合将 pyspark 数据框中的行与多列连接起来

Pyspark 根据数据框 groupBy 制作多个文件

如何在 PySpark 中对 groupby 数据框应用条件

如何将 groupBy 和聚合函数应用于 PySpark DataFrame 中的特定窗口?

在 pyspark 中,是不是可以使用 1 个 groupBy 进行 2 个聚合?