我有一个包含成千上万行的数据框,其中包含列“ A”,“ B”和其他列。 df以拼花格式保存,并由“ A”分区。如果我运行:
df.groupBy('A').agg(agg_functions)
它可以工作,但是如果我运行:
df.groupBy('B').agg(agg_functions)
由于内存不足,该过程失败了(它试图将所有数据带给执行者)。 我知道A,B之间存在关系:B的相同值只能出现在A的两个连续分区中。有没有办法利用这一事实有效地执行操作?
答案 0 :(得分:1)
一种方法可能是将两列分组并聚合两次。例如,如果我有三列(国家,城市和订单),则在这种情况下,假设您的列“ A”为国家,城市为“ B”。现在,如果我想按国家/地区分组所有订单,就可以做到
df.groupBy("country").agg(count)
某些分区可能像您的情况一样庞大,所以我宁愿做类似的事情,
intermediateResults = df.groupBy("country","city").agg(count)
intermediateResults.groupBy("country").agg(sum)
您可能并不总是在列之间具有这种关系,在这种情况下,您可以将其按时间或ID分开。