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

时间:2017-10-25 18:24:33

标签: python apache-spark pyspark spark-dataframe

我想在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循环非常慢。

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您需要的是两列所有组合的列表,那么另一种方法是循环遍历它们并执行groupBy。然而,groupBy因为缓慢而低效而臭名昭着。根据您需要汇总的内容,最好调查reduceByKeycombineByKey