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

使用read_parquet读取分区Parquet文件时如何合并Schema并保留新增列

如何用pyarrow读取分区Parquet时强制加载新增列并自动填充Null

可以实现,不用遍历所有文件,通过指定统一Schema和columns参数就能搞定,具体操作如下:

核心思路

利用read_parquet的schema参数定义包含所有目标列的统一数据结构,让pyarrow按照这个结构读取所有文件——没有新增列的旧文件会自动为缺失列填充Null值;同时配合columns参数明确指定要加载的列,避免不必要的开销。

具体实现

  1. 定义统一Schema
    先根据实际数据类型,手动定义包含column_1、column_2、column_3的Schema。如果不确定column_3的类型,可以先读取一个包含该列的新文件获取其Schema。

    手动定义示例:

    import pyarrow as pa
    import pandas as pd
    
    # 替换成你实际的列类型
    unified_schema = pa.schema([
        ("column_1", pa.int64()),
        ("column_2", pa.string()),
        ("column_3", pa.float64())
    ])
    

    从新文件获取Schema示例:

    # 读取一个包含column_3的文件
    sample_schema = pd.read_parquet("path/to/new_parquet_file.parquet", engine="pyarrow").schema
    
  2. 读取全部分区文件
    调用read_parquet时,指定columns和schema参数:

    df = pd.read_parquet(
        "你的分区根路径",
        engine="pyarrow",
        columns=["column_1", "column_2", "column_3"],
        schema=unified_schema  # 或上面的sample_schema
    )
    

效果说明

执行后,旧文件中缺失的column_3会被自动填充为对应类型的Null值(比如数值类型是NaN,字符串类型是pd.NA),不需要逐个处理文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:57:36