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

PySpark采样DataFrame计数耗时未降低原因及内存优化疑问

采样count与全量count耗时相近的原因及内存优化分析

耗时相近的核心原因

  • Spark的sample(withReplacement=False, fraction=0.1)操作必须遍历全量数据:无放回采样需要对每个分区的每条数据做随机筛选判断,这个过程的IO和计算开销和全量count()几乎一模一样——本质上都是把所有数据读一遍。
  • 你观察到的总耗时里,sample步骤已经占了绝大部分时间,后续sampled_df.count()只是统计采样后那10%的数据,耗时可以忽略,所以整体耗时和直接全量count差不了多少。
  • 如果你的DataFrame没提前缓存,两次操作都是从头读取原始数据源,进一步拉平了耗时差距。

内存使用的实际表现

  • 采样过程中:内存峰值和全量count基本一致,因为采样时每个executor都要加载自己负责的全量分区数据,筛选出采样部分后才会释放原数据内存,这一步的内存压力和全量count相同。
  • 采样完成后:如果后续要复用sampled_df,它在内存中只保留10%的数据,内存占用会比全量DataFrame低很多;但如果只是采样后立即count,采样完成后count操作很快,内存会快速回收,整体平均内存占用略低于全量count,但峰值差异不大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:03:30