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

PyArrow写入Parquet的timestamp[s]重载后变timestamp[ms]的问题咨询

问题解答

是不是Parquet格式不支持秒级时间戳?

不是。Parquet规范明确定义了四种时间戳精度类型:TIMESTAMP_SECONDS(秒级)、TIMESTAMP_MILLIS(毫秒级)、TIMESTAMP_MICROS(微秒级)、TIMESTAMP_NANOS(纳秒级),完全支持秒级时间戳存储。问题出在PyArrow的默认写入行为——默认会将时间戳强制转换为毫秒精度,这是出于兼容早期Parquet实现的考量,并非格式本身的限制。

如何让重载后的schema与原schema完全一致?

在调用pq.write_metadata时,指定coerce_timestamps=None参数,即可保留时间戳的原始精度:

import pyarrow as pa, pyarrow.parquet as pq

# 定义原schema
schema = pa.schema([pa.field("dob", pa.timestamp('s'))])
print("原schema:", schema)

# 写入元数据时保留原始时间戳精度
pq.write_metadata(schema, '_common_schema', coerce_timestamps=None)

# 重新读取元数据
reloaded_schema = pq.read_schema('_common_schema')
print("重载后的schema:", reloaded_schema)

执行上述代码后,重载后的schema会和原schema一致,均为dob: timestamp[s]。

如果是写入实际Parquet数据文件,同样可以在pq.write_table中传递coerce_timestamps=None参数,确保时间戳精度不被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:38:26