将日期时间与 Pyarrow 一起使用时出现溢出错误

overflow error using datetimes with Pyarrow

在随机化日期时间以测试数据库时,我使用 pyarrow.parquets' write_table() 将它们保存到 parquet,然后使用 read_table() 读回它们。

尝试使用 to_pydict() 转换为 Python 数据类型时,我收到以下错误:

---> 81 from_parquet = pq.read_table('parquet_vs_csv').to_pydict()
     82
     83 '''

pyarrow/table.pxi in pyarrow.lib.Table.to_pydict (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:38283)()

pyarrow/table.pxi in pyarrow.lib.Column.to_pylist (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:31782)()

pyarrow/table.pxi in pyarrow.lib.ChunkedArray.to_pylist (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:30410)()

pyarrow/array.pxi in __iter__ (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:25015)()

pyarrow/scalar.pxi in pyarrow.lib.TimestampValue.as_py (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:21082)()

pyarrow/scalar.pxi in pyarrow.lib.lambda5 (/arrow/python/build/temp.linux-x86_64-2.7/lib.cxx:7234)()

pandas/_libs/tslib.pyx in pandas._libs.tslib.Timestamp.__new__ (pandas/_libs/tslib.c:10051)()

pandas/_libs/tslib.pyx in pandas._libs.tslib.convert_to_tsobject (pandas/_libs/tslib.c:27665)()

OverflowError: Python int too large to convert to C long

我玩了一下,这种情况发生在年大于 2700 年左右的日期时间(这是在工作,这是一个更大的数字,忘记了确切的数字)。

我是 pyarrow 的新手,这是预期的行为吗?

这里的根本问题是 Pandas 表示自 1970 年以来的纳秒日期时间。2700 年左右的时间只是 nanoseconds-since-1970 的数量超过 space 可以用 int64.

表示

在 Arrow 中,您可以使用 milliseconds-since-1970 等更细粒度的表示来表示这些日期,但在转换为 Pandas 时,它们总是被转换为 nanoseconds-since-1970,因此这个日期无法在 Pandas.

中表示