大分组场景下Rolling quantile计算的内存溢出问题求助
大分组场景下Rolling quantile计算的内存溢出问题求助
各位大佬好,我最近在处理滚动分位数计算的时候碰到了内存溢出的难题,想请教下有没有更好的解决思路:
我手头的数据集有3亿多行、7列,需要按id1和id2分组后,计算1个月窗口的滚动10分位数。目前用的Polars代码如下:
lf.sort('time') .rolling( index_column='time', group_by=['id1', 'id2'], period="1mo", closed="left", ) .agg( pl.quantile('x', 0.1).alias('q10') )
其中id1有大概17000个不同取值,id2有20个,算下来总共有34万左右的分组。
我已经尝试了这些优化:
- 用
sink_parquet替代collect,并且把引擎设置为"streaming" - 按
time列做Hive分区存储,但对内存占用没什么改善
另外我还发现,如果去掉group_by,内存就不会出问题,但计算时间会变得特别长。
我目前能想到的折中办法是把数据集按id1和id2拆分后分别处理,这样能把数据塞进内存,但总觉得有点麻烦,想看看有没有不需要拆分数据集的优化方案?
内容来源于stack exchange
相关产品推荐
相关产品推荐

