如何按两个字段对数据进行分组?
Posted
技术标签:
【中文标题】如何按两个字段对数据进行分组?【英文标题】:How to group data by two fields? 【发布时间】:2017-10-25 18:24:33 【问题描述】:我想在pyspark DataFrame中对数据进行分组,当我只有一个字段field1
时,我这样做如下:
groups = df.select("field1").distinct().flatMap(lambda x: x).collect()
dfs = [df.where(df["field1"] == g) for g in groups]
我得到了 N 个 DataFrame 的列表 dfs
,其中 N 是 groups
的大小。现在我想使用field1
和field2
对我的数据进行分组。
我该怎么做?
另外,我想知道使用 List of DataFrame 是否是一种好方法?然后我在 for 循环中使用dfs
:for d in dfs
。但是这个for循环真的很慢。
【问题讨论】:
我不确定你到底想做什么,但是 groupBy("field1","field2") 有效吗? 您是否有机会发布您的数据框? 【参考方案1】:如果您只对按两个特定列进行分组感兴趣,请使用groupBy
。一个使用两列的简单示例:
val df2 = df.groupBy('col1', 'col2')
在执行groupBy
之后,通常您必须对agg
使用聚合函数,可用选项请参阅here。
如果您需要的是两列所有组合的列表,那么另一种方法是遍历它们并执行groupBy
。但是,groupBy
因速度慢、效率低而臭名昭著。根据您需要汇总的内容,最好查看reduceByKey
或combineByKey
。
【讨论】:
以上是关于如何按两个字段对数据进行分组?的主要内容,如果未能解决你的问题,请参考以下文章
如何对两个字段进行分组并将索引设置为两个字段之一。熊猫,Python-3