You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大分组场景下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:39:30