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



我想在pyspark DataFrame中对数据进行分组,当我只有一个字段field1时,我这样做如下:

groups = df.select("field1").distinct().flatMap(lambda x: x).collect()
dfs = [df.where(df["field1"] == g) for g in groups]

我得到了 N 个数据帧的列表dfs,其中 N 的大小为 groups .现在,我想使用 field1field2 对数据进行分组。

我该怎么做?

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

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

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

执行groupBy后,通常必须使用带有agg的聚合函数,有关可用选项,请参阅此处。


如果您需要的是两列的所有组合的列表,那么另一种方法是循环访问它们并执行groupBy .然而,groupBy因缓慢和低效而臭名昭著。根据您需要聚合的内容,最好查看reduceByKeycombineByKey

相关内容

  • 没有找到相关文章

最新更新