groupby的巨型sparkDataframe

mpgws1up  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(360)

我有一个Dataframe,有成千上万的行,列“a”、“b”和其他列。df以Parquet格式保存,由“a”分隔。如果我跑:

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

它工作,但如果我运行:

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

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

pkwftd7m

pkwftd7m1#

一种方法是按两列分组并聚合两次。例如,如果我有三个列(country、city和orders),那么在本例中假设您的列'a'是country,city是'b'。如果我想把所有的订单按国家分组,我可以做,

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

有些分区可能会像你的箱子一样大,所以我宁愿做这样的事,

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

您可能并不总是在列之间有这种关系,在这种情况下,您可以跨时间或id将其拆分。

相关问题