如何用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
相关产品推荐
相关产品推荐

