如何在 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 数据框应用条件