通过巨大的Spark数据框进行分组

时间:2020-06-01 17:08:58

标签: apache-spark pyspark aggregate

我有一个包含成千上万行的数据框,其中包含列“ A”,“ B”和其他列。 df以拼花格式保存,并由“ A”分区。如果我运行:

df.groupBy('A').agg(agg_functions)

它可以工作,但是如果我运行:

df.groupBy('B').agg(agg_functions)

由于内存不足,该过程失败了(它试图将所有数据带给执行者)。 我知道A,B之间存在关系:B的相同值只能出现在A的两个连续分区中。有没有办法利用这一事实有效地执行操作?

1 个答案:

答案 0 :(得分:1)

一种方法可能是将两列分组并聚合两次。例如,如果我有三列(国家,城市和订单),则在这种情况下,假设您的列“ A”为国家,城市为“ B”。现在,如果我想按国家/地区分组所有订单,就可以做到

df.groupBy("country").agg(count)

某些分区可能像您的情况一样庞大,所以我宁愿做类似的事情,

intermediateResults = df.groupBy("country","city").agg(count)
intermediateResults.groupBy("country").agg(sum)

您可能并不总是在列之间具有这种关系,在这种情况下,您可以将其按时间或ID分开。

相关问题