【问题标题】:How to use groupby with array elements in Pyspark?如何在 Pyspark 中使用 groupby 和数组元素?
【发布时间】: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字段中的所有列名以及状态、年份、代码等进行分组吗?
  • 是的,但是一次只有一个元素的循环

标签: apache-spark pyspark


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2017-12-28
    相关资源
    最近更新 更多