如何按两个字段对数据进行分组?

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 的大小。现在我想使用field1field2 对我的数据进行分组。

我该怎么做?

另外,我想知道使用 List of DataFrame 是否是一种好方法?然后我在 for 循环中使用dfsfor d in dfs。但是这个for循环真的很慢。

【问题讨论】:

我不确定你到底想做什么,但是 groupBy("field1","field2") 有效吗? 您是否有机会发布您的数据框? 【参考方案1】:

如果您只对按两个特定列进行分组感兴趣,请使用groupBy。一个使用两列的简单示例:

val df2 = df.groupBy('col1', 'col2')

在执行groupBy 之后,通常您必须对agg 使用聚合函数,可用选项请参阅here。


如果您需要的是两列所有组合的列表,那么另一种方法是遍历它们并执行groupBy。但是,groupBy 因速度慢、效率低而臭名昭著。根据您需要汇总的内容,最好查看reduceByKeycombineByKey

【讨论】:

以上是关于如何按两个字段对数据进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何对两个字段进行分组并将索引设置为两个字段之一。熊猫,Python-3

如何按特定日期范围(例如小时、日、月)对数据进行分组?

Pandas:如何按一组序数值对数据框进行分组?

我可以使用 PDO::FETCH_GROUP 按两个值对结果进行分组吗

如何对每个表进行分组计数并按列打印? [复制]

hive hql怎么按两个字段同时分组统计