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

Python无需Pandas写入Parquet文件:ETL中JSON转Parquet方法咨询

当然有办法!你完全可以跳过Pandas DataFrame这一步,直接用PyArrow的原生功能完成JSON到Parquet的转换——既省了多余的内存开销,又彻底摆脱了对Pandas的依赖,非常适合ETL流水线的高效处理需求。

下面给你两种实用的实现方式:

1. 基础版:直接读取JSON并写入Parquet

PyArrow自带的pyarrow.json.read_json()方法可以直接把JSON文件、内存中的JSON字符串数组甚至文件对象转换成PyArrow Table,之后用pyarrow.parquet.write_table()就能直接输出Parquet文件,全程和Pandas无关。

举个简单的代码示例:

import pyarrow as pa
import pyarrow.json as pajson
import pyarrow.parquet as papq

# 从本地JSON文件读取成PyArrow Table
json_table = pajson.read_json("your_input.json")

# 直接写入Parquet文件
papq.write_table(json_table, "your_output.parquet")

如果你的JSON数据是存在内存里的字符串列表,也能直接处理:

# 内存中的JSON字符串示例
json_strings = [
    '{"user_id": 101, "username": "milan_c", "signup_date": "2023-01-15"}',
    '{"user_id": 102, "username": "data_nerd", "signup_date": "2023-02-20"}'
]

# 从字符串数组生成PyArrow Table
json_table = pajson.read_json(pa.array(json_strings))
papq.write_table(json_table, "memory_to_parquet.parquet")
2. 进阶版:自定义Schema控制转换逻辑

如果你的JSON数据结构复杂(比如存在可选字段、嵌套结构),或者需要严格控制输出Parquet的Schema,可以提前定义PyArrow Schema,让JSON读取时按照指定规则解析,避免自动推断可能带来的类型错误:

import pyarrow as pa
import pyarrow.json as pajson
import pyarrow.parquet as papq

# 自定义Schema,明确每个字段的类型
custom_schema = pa.schema([
    ("user_id", pa.int64()),
    ("username", pa.string()),
    ("signup_date", pa.date32()),
    ("is_premium", pa.bool_())
])

# 按照自定义Schema读取JSON
json_table = pajson.read_json("complex_input.json", schema=custom_schema)

# 写入Parquet时还可以配置压缩、分区等参数
papq.write_table(
    json_table,
    "schema_controlled_output.parquet",
    compression="snappy",  # 启用snappy压缩
    write_statistics=True  # 写入统计信息,提升后续查询性能
)

这种方式的优势很明显:

  • 完全移除Pandas依赖,简化项目的依赖管理
  • 基于PyArrow的列式存储特性,内存效率更高,处理大数据量时比Pandas更高效
  • 原生支持多种输入源,适配不同的ETL场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:21