Pyspark 通过多个键并行分组数据框

Pyspark Group a Dataframe by Multiple Keys in Parallel

我需要按所有可能的列组合对数据框进行分组并输出计数。

例如:

df:

col1 col2
val1 val2

combination_list:

[[col1], [col2], [col1, col2]]

组合的个数=2^n - 1,也就是说我需要做2^n -1次groupby操作

我试过:

for c in combination_list:
  df_result = df.groupby(c).count()
  df_result.repartition(1).write.csv('file_path')

这非常慢,因为我有数百种组合,而且我知道在 pyspark 中应该避免 for 循环。 如何对列表中的所有组合并行进行groupby?

您要查找的操作是cube。 Cube 为作为参数传递的所有列组合生成聚合。


data = [("c1v1", "c2v1",),
        ("c1v2", "c2v2",),
        ("c1v1", "c2v2",), ]

df = spark.createDataFrame(data, ("col1", "col2"))

df.show()

"""
+----+----+
|col1|col2|
+----+----+
|c1v1|c2v1|
|c1v2|c2v2|
|c1v1|c2v2|
+----+----+
"""

df.cube(df.columns).count().show()

"""
+----+----+-----+
|col1|col2|count|
+----+----+-----+
|c1v2|c2v2|    1|
|c1v1|c2v1|    1|
|c1v1|c2v2|    1|
|null|null|    3|
|null|c2v2|    2|
|null|c2v1|    1|
|c1v2|null|    1|
|c1v1|null|    2|
+----+----+-----+
"""