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

Azure ML Notebook加载大Parquet文件致内核重启,求无拆分解决方案

解决Azure ML Notebook加载大Parquet文件内存不足问题

方案1:用Dask替代Pandas加载数据

Dask是并行计算框架,支持分块读取Parquet文件,无需将全量数据加载到内存,API和Pandas高度兼容,适合处理超内存的数据集。

  • 先安装依赖(如果未安装):
    !pip install dask dask[dataframe] pyarrow
    
  • 加载代码示例:
    from dask import dataframe as dd
    from azureml.core import Workspace, Datastore
    
    # 获取工作区和数据存储
    ws = Workspace.from_config()
    datastore = Datastore.get(ws, datastore_name="your_datastore_name")
    parquet_path = datastore.path("path/to/your/file.parquet").as_mount()
    
    # 分块加载Parquet
    ddf = dd.read_parquet(parquet_path, engine='pyarrow')
    
    # 后续可直接用Dask API操作(和Pandas几乎一致),如需转Pandas可按需取部分数据
    # 例如取前1000行转Pandas:
    # sample_df = ddf.head(1000, compute=True)
    

方案2:升级计算实例内存规格

Parquet文件加载到Pandas DataFrame后,内存占用通常是原文件的2-5倍(因列类型、压缩等因素),14GB内存远不足以承载20GB+的Parquet数据。直接升级计算实例到更高内存规格:

  • 停止当前计算实例
  • 在Azure ML Studio的「计算」页面,选择该实例,点击「更改大小」
  • 选择内存更高的规格(比如8核32GB、16核64GB等)
  • 重启实例后重新运行代码

方案3:用Azure ML Dataset流式分块加载

利用Azure ML Dataset的to_pandas_dataframe方法的chunk_size参数,实现分块读取,避免一次性加载全量数据:

from azureml.core import Workspace, Dataset

ws = Workspace.from_config()
dataset = Dataset.get_by_name(ws, name="your_parquet_dataset")

# 按指定行数分块加载,逐块处理
for chunk in dataset.to_pandas_dataframe(chunk_size=100000):
    # 在这里处理单块数据,比如分析、特征工程等
    process_chunk(chunk)

方案4:优化Pandas读取参数减少内存占用

如果必须用Pandas,通过读取时的参数优化降低内存消耗:

  • 只加载需要的列:
    df = pd.read_parquet(parquet_path, columns=['col1', 'col2', 'col3'])
    
  • 指定更紧凑的数据类型:
    dtype_mapping = {
        "int_col": "int32",
        "str_col": "category"
    }
    df = pd.read_parquet(parquet_path, dtype=dtype_mapping)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:30:51