如何将浮点数转换为 Parquet TIMESTAMP 逻辑类型?
How to convert a float to a Parquet TIMESTAMP Logical Type?
假设我有一个 pyarrow table,其列 Timestamp
包含 float64
。
这些浮点数实际上是用 s 表示的时间戳。
例如:
import pyarrow as pa
my_table = pa.table({'timestamp': pa.array([1600419000.477,1600419001.027])})
我从 documentation 那里了解到 Parquet 逻辑类型。
请问,如何将这些浮点值转换为逻辑类型 TIMESTAMP?
我没有看到有关执行此操作的方法的文档。
感谢您的帮助。
祝你有美好的一天,
最佳,
我认为您无法将箭头内的浮点数转换为时间戳。
Arrow 假定时间戳是给定精度(ms、us、ns)的 64 位整数。在您的情况下,您必须将秒浮点数乘以您想要的精度(毫秒为 1000),然后转换为 int64 并转换为时间戳。
这是一个使用 pandas 的例子:
(
pa.array([1600419000.477,1600419001.027])
.to_pandas()
.mul(1000)
.astype('long')
.pipe(pa.Array.from_pandas)
.cast(pa.timestamp('ms'))
)
这给你:
<pyarrow.lib.TimestampArray object at 0x7fb5025b6a08>
[
2020-09-18 08:50:00.477,
2020-09-18 08:50:01.027
]
你需要在pyarrow中将floats转换为实际的时间戳类型,然后它会自动写入paruet逻辑时间戳类型。
使用 pyarrow.compute
模块,这种转换也可以在 pyarrow 中完成(在 pandas 中进行转换不太符合人体工程学,但避免转换到 pandas 并返回):
>>> import pyarrow.compute as pc
>>> arr = pa.array([1600419000.477,1600419001.027])
>>> pc.multiply(arr, pa.scalar(1000.)).cast("int64").cast(pa.timestamp('ms'))
<pyarrow.lib.TimestampArray object at 0x7fe5ec3df588>
[
2020-09-18 08:50:00.477,
2020-09-18 08:50:01.027
]
假设我有一个 pyarrow table,其列 Timestamp
包含 float64
。
这些浮点数实际上是用 s 表示的时间戳。
例如:
import pyarrow as pa
my_table = pa.table({'timestamp': pa.array([1600419000.477,1600419001.027])})
我从 documentation 那里了解到 Parquet 逻辑类型。 请问,如何将这些浮点值转换为逻辑类型 TIMESTAMP? 我没有看到有关执行此操作的方法的文档。
感谢您的帮助。 祝你有美好的一天, 最佳,
我认为您无法将箭头内的浮点数转换为时间戳。
Arrow 假定时间戳是给定精度(ms、us、ns)的 64 位整数。在您的情况下,您必须将秒浮点数乘以您想要的精度(毫秒为 1000),然后转换为 int64 并转换为时间戳。
这是一个使用 pandas 的例子:
(
pa.array([1600419000.477,1600419001.027])
.to_pandas()
.mul(1000)
.astype('long')
.pipe(pa.Array.from_pandas)
.cast(pa.timestamp('ms'))
)
这给你:
<pyarrow.lib.TimestampArray object at 0x7fb5025b6a08>
[
2020-09-18 08:50:00.477,
2020-09-18 08:50:01.027
]
你需要在pyarrow中将floats转换为实际的时间戳类型,然后它会自动写入paruet逻辑时间戳类型。
使用 pyarrow.compute
模块,这种转换也可以在 pyarrow 中完成(在 pandas 中进行转换不太符合人体工程学,但避免转换到 pandas 并返回):
>>> import pyarrow.compute as pc
>>> arr = pa.array([1600419000.477,1600419001.027])
>>> pc.multiply(arr, pa.scalar(1000.)).cast("int64").cast(pa.timestamp('ms'))
<pyarrow.lib.TimestampArray object at 0x7fe5ec3df588>
[
2020-09-18 08:50:00.477,
2020-09-18 08:50:01.027
]