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

无需PySpark,如何高效分析51万行636列的大型数据集?

无需PySpark的大数据集分析方案

针对你51万行、636列的数据集,不用PySpark也能高效完成分析,以下是具体方案:

1. 优化Dask使用,发挥其原生能力

你遇到的shape返回延迟对象、无法直接显示数据,都是Dask懒执行机制的正常表现,调整使用方式即可:

  • 获取实际行数:调用df_pisa.shape[0].compute()触发计算,就能得到具体数值。
  • 查看数据条目:不要直接打印全量DataFrame,用df_pisa.head(n=10).compute()获取前10行,或df_pisa.sample(frac=0.01).compute()抽取1%样本查看,避免加载全量数据。
  • 分析全程优先用Dask原生API(如groupby、describe),最后再用compute()触发计算,比转成Pandas高效得多。
  • 加载CSV时指定blocksize参数(如blocksize='100MB'),让Dask将文件拆分为更合理的计算块:
df_pisa = dataframe.read_csv('pisa2012.csv', blocksize='100MB')

2. Pandas内存优化后直接加载

51万行的数据集通过内存优化,完全可以塞进8GB以上内存的普通机器:

  • 先读取小样本确定列类型,再用更紧凑的类型加载全量数据:
# 读取1000行样本获取列信息
sample_df = pd.read_csv('pisa2012.csv', nrows=1000)
dtype_map = {}
for col in sample_df.columns:
    if sample_df[col].dtype == 'object':
        dtype_map[col] = 'category'  # 字符串列转category,大幅节省内存
    elif sample_df[col].dtype == 'int64':
        dtype_map[col] = 'int32'     # 整数列降级为int32(无溢出风险时)
    elif sample_df[col].dtype == 'float64':
        dtype_map[col] = 'float32'   # 浮点列降级为float32

# 用优化后的类型加载全量数据
df_pisa = pd.read_csv('pisa2012.csv', dtype=dtype_map)
  • 用usecols参数只加载需要分析的列,进一步减少内存占用。
  • 加载后用df_pisa.memory_usage(deep=True).sum()/1024**2查看内存占用,确认是否在机器承受范围内。

3. 使用Vaex工具替代

Vaex采用内存映射技术,无需将全量数据加载到内存,体验接近Pandas但能处理远超内存的数据集:

  • 安装后直接加载CSV:
import vaex
df_pisa = vaex.read_csv('pisa2012.csv')
  • Vaex支持即时查看数据、快速计算统计量,无需手动触发计算,操作更顺滑。

4. 预处理阶段精简数据

  • 先删除完全为空的列、去重,减少数据集规模。
  • 用命令行工具csvstat pisa2012.csv快速查看列的分布、空值占比等信息,提前规划分析方向,避免盲目加载全量数据。

内容的提问来源于stack exchange,提问作者Ibrahim-san

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:57:35