我有一个Dataframe,有成千上万的行,列“a”、“b”和其他列。df以Parquet格式保存,由“a”分隔。如果我跑:
df.groupBy('A').agg(agg_functions)
它工作,但如果我运行:
df.groupBy('B').agg(agg_functions)
由于内存不足,进程失败(它试图将所有数据带到执行器)。我知道a,b之间有一种关系:b的相同值只能出现在a的两个连续分区中。有没有办法利用这个事实来有效地执行操作?
我有一个Dataframe,有成千上万的行,列“a”、“b”和其他列。df以Parquet格式保存,由“a”分隔。如果我跑:
df.groupBy('A').agg(agg_functions)
它工作,但如果我运行:
df.groupBy('B').agg(agg_functions)
由于内存不足,进程失败(它试图将所有数据带到执行器)。我知道a,b之间有一种关系:b的相同值只能出现在a的两个连续分区中。有没有办法利用这个事实来有效地执行操作?
1条答案
按热度按时间pkwftd7m1#
一种方法是按两列分组并聚合两次。例如,如果我有三个列(country、city和orders),那么在本例中假设您的列'a'是country,city是'b'。如果我想把所有的订单按国家分组,我可以做,
有些分区可能会像你的箱子一样大,所以我宁愿做这样的事,
您可能并不总是在列之间有这种关系,在这种情况下,您可以跨时间或id将其拆分。