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

如何用PyArrow读写Schema文件,批量转换JSON为Parquet至ADLS

使用PyArrow官方方案读写Schema实现多表转换

PyArrow提供了官方的Schema序列化/反序列化工具,无需自定义格式和解析器,完全满足你的需求。以下是具体实现方式:

一、将Schema写入文件

PyArrow支持将Schema以JSON格式(可读)或二进制格式(高效)写入文件,推荐使用JSON格式便于排查问题:

1. JSON格式写入(推荐)

import pyarrow as pa

# 定义目标Schema
my_schema = pa.schema([
    pa.field('col1', pa.int64()),
    pa.field('col2', pa.string())
])

# 将Schema写入JSON文件
schema_file_path = "schema_table_001.json"
pa.json.write_schema(my_schema, schema_file_path)

2. 二进制格式写入(性能优先)

如果追求更高的读写性能,可使用二进制序列化:

# 将Schema序列化为二进制并写入文件
with open("schema_table_001.bin", "wb") as f:
    f.write(my_schema.serialize())

二、从文件加载Schema

对应上述两种格式,加载方式如下:

1. 从JSON文件加载Schema

# 从JSON文件读取并解析为pa.schema对象
loaded_schema = pa.json.read_schema(schema_file_path)

2. 从二进制文件加载Schema

# 从二进制文件读取并反序列化为Schema
with open("schema_table_001.bin", "rb") as f:
    loaded_schema = pa.deserialize(f.read())

三、完整流程示例(适配你的多表转换场景)

import pyarrow as pa
import pyarrow.parquet as pq

# 模拟遍历120个Schema各异的表
for table_idx in range(120):
    # 1. 加载当前表对应的Schema(以JSON格式为例)
    schema_path = f"schema_table_{table_idx:03d}.json"
    target_schema = pa.json.read_schema(schema_path)
    
    # 2. 获取当前表的JSON数据(替换为你实际的List[Dict]数据源)
    data = [
        {"col1": 1, "col2": "a"},
        {"col1": 2, "col2": "b"},
        {"col1": 3, "col2": "c"}
    ]
    
    # 3. 按指定Schema将JSON数据转换为Arrow表
    arrow_table = pa.Table.from_pylist(data, schema=target_schema)
    
    # 4. 写入ADLS的Parquet文件(替换为你的ADLS写入逻辑)
    parquet_path = f"adls_container/table_{table_idx:03d}.parquet"
    pq.write_table(arrow_table, parquet_path)

关键说明

  • 所有Schema读写操作均为PyArrow官方实现,无需自定义解析逻辑,兼容性和稳定性有保障。
  • JSON格式的Schema文件可直接打开查看,便于调试和维护;二进制格式读写速度更快,适合大规模数据场景。
  • 需确保Schema文件名与对应表的标识一一对应(如按索引、表名命名),遍历过程中能准确匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:20:32