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

Polars DataFrame内存无法释放求助:循环任务内存占用居高不下

解决Polars DataFrame内存无法释放的问题

核心排查与修复步骤

  • 升级Polars和PyArrow版本:旧版本存在已知内存泄漏问题,先更新到最新稳定版:
    pip install --upgrade polars pyarrow
    
  • 复用PyArrow Dataset对象:不要在循环内重复创建pa_dataset,底层文件句柄和缓存会持续占用内存,把初始化移到循环外:
    # 循环外初始化Dataset,仅在路径变更时重新创建
    pa_dataset = pyarrow.dataset.dataset(source=dataset_path, format="parquet", partitioning="hive")
    
    while True:
        # 循环内复用已创建的Dataset
        df1 = pl.scan_pyarrow_dataset(pa_dataset, allow_pyarrow_filter=True)\
                .filter((pl.col("timestamp") > start_date) & (pl.col("timestamp") < end_date))\
                .select('sourceIPAddress', 'destinationIPAddress', 
                        'sourceTransportPort', 'destinationTransportPort',
                        'protocol', 'numPacketsCountIn', 'numPacketsCountOut')\
                .collect()
        
        # 执行你的数据处理逻辑...
        
        # 优化内存回收流程
        df1 = None  # 先置空断开引用链
        del df1
        gc.collect()
        
        time.sleep(3600)
    
  • 清理Polars内部缓存:Polars会缓存执行计划和临时数据,手动调用清理接口:
    import polars as pl
    pl.clear_cache()
    
  • 排查隐式引用:用gc.get_referrers(df1)在del前查看哪些对象还持有DataFrame的引用,比如全局变量、闭包、处理函数中的残留引用,这些都会阻止GC回收。
  • 用内存分析工具定位泄漏点:借助tracemalloc追踪内存变化,找到真正的泄漏源:
    import tracemalloc
    tracemalloc.start()
    
    # 循环内添加快照对比
    snapshot_before = tracemalloc.take_snapshot()
    # 执行数据采集与处理
    snapshot_after = tracemalloc.take_snapshot()
    
    top_stats = snapshot_after.compare_to(snapshot_before, 'lineno')
    print("Top 10内存变化点:")
    for stat in top_stats[:10]:
        print(stat)
    

额外内存优化建议

  • 分批次处理数据:如果单批次数据量过大,改用iter_batches分块读取,降低单批次内存占用:
    lazy_df = pl.scan_pyarrow_dataset(pa_dataset, allow_pyarrow_filter=True).filter(...)
    for batch in lazy_df.iter_batches(batch_size=100_000):
        # 处理单批次数据
        process_batch(batch)
    
  • 延迟collect()时机:如果后续处理可以用Lazy API完成,尽量不要提前collect()为Eager DataFrame,减少内存驻留时间。

内容的提问来源于stack exchange,提问作者Deepank Dhillon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:12:12