首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >pyarrow/parquet错误地保存大的时间戳

pyarrow/parquet错误地保存大的时间戳
EN

Stack Overflow用户
提问于 2021-10-06 00:34:28
回答 2查看 380关注 0票数 1

我有一些时间戳在数据库中是9999-12-31的,并试图转换为拼花。不知何故,这些时间戳在拼图文件中都以1816-03-29 05:56:08.066的形式结束。

以下是重现该问题的一些代码。

代码语言:javascript
代码运行次数:0
运行
复制
file_path = "tt.parquet"
schema = pa.schema([pa.field("tt", pa.timestamp("ms"))])
table = pa.Table.from_arrays([pa.array([datetime(9999, 12, 31),], pa.timestamp('ms'))], ["tt"])
writer = pq.ParquetWriter(file_path, schema)
writer.write_table(table)
writer.close()

我没有尝试用pandas读取数据,但我尝试过用pandas检查,但最终出现了pyarrow.lib.ArrowInvalid: Casting from timestamp[ms] to timestamp[ns] would result in out of bounds timestamp:错误。

我正在将拼图文件加载到Snowflake中,并返回错误的时间戳。我也尝试过使用拼图工具进行检查,但这似乎不适用于时间戳。

parquet/pyarrow不支持大的时间戳吗?如何存储正确的时间戳?

EN

回答 2

Stack Overflow用户

发布于 2021-10-06 01:05:14

显然,时间戳'9999-12-31‘不是用作真正的时间戳,而是用作无效值的标志。

如果在流水线的末尾,Snowflake看到的是'1816-03-29 05:56:08.066',那么您可以将它们保持原样-或者将它们重新转换为您希望它们在Snowflake中具有的任何值。至少它是一致的。

但是,如果您坚持希望Python能够正确处理9999种情况,那么可以看看这个用use_deprecated_int96_timestamps=True解决的问题

票数 0
EN

Stack Overflow用户

发布于 2021-10-07 00:04:14

对我来说,这是因为我需要在拼花writer上设置use_deprecated_int96_timestamps=False

默认情况下它说它是假的,但是我把它的风格设置为“spark”,所以我认为它覆盖了它。

感谢你的帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69458623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档