【问题标题】:Redshift spectrum incorrectly parsing Pyarrow datetime64[ns]红移光谱错误地解析 Pyarrow datetime64[ns]
【发布时间】:2020-01-04 04:17:09
【问题描述】:

我在 Redshift 光谱中有一个外部表,其中 DDL 的日期时间列如下所示:

collector_tstamp TIMESTAMP WITHOUT TIME ZONE

目标:我正在尝试对一组数据进行拼花,然后将分区添加到 Spectrum 中以查看值是否被完美解析。

创建 parquet 后,以下是对应 parquet 文件中 'collector_tstamp' 的元数据:

{“元数据”:null,“field_name”:“collector_tstamp”,“name”:“collector_tstamp”,“numpy_type”:“datetime64[ns]”,“pandas_type”:“datetime”}

在此之前,我在以下帮助下将 pandas 数据框列转换为日期时间数据类型:

df['collector_tstamp'] = pd.to_datetime(df['collector_tstamp'])

问题:当我在 Redshift 光谱中查询数据时,我看到以下值很明显解析错误,但我不确定应该更改为什么数据类型以便解析正确:

collector_tstamp
36332-04-23 15:29:01
36332-04-23 15:29:01
36332-04-23 15:29:01
36332-04-23 15:29:01
36332-04-23 15:29:01

我也尝试过类似的方法,但仍然得到上述值:

df['collector_tstamp'] = pd.to_datetime(df['collector_tstamp'], infer_datetime_format=True)

我也试过了,但查询时仍然是相同的值:

df['collector_tstamp'] = df['collector_tstamp'].astype('datetime64[s]')

样本数据

collector_tstamp
2019-01-04 04:02:36
2019-01-04 04:03:41
2019-01-04 04:03:45
2019-01-04 04:04:11

【问题讨论】:

  • 你能把样本数据给我们看看吗
  • 当然。刚刚在上面添加。

标签: pandas pyarrow amazon-redshift-spectrum


【解决方案1】:

pyarrow 默认写入的纳秒时间戳是相当新的,当前的 Redshift 版本可能无法正确理解。查看https://arrow.apache.org/docs/python/parquet.html 的文档并尝试使用flavor='spark' 编写文件或阅读“存储时间戳”部分中的其他设置。

由于您可能无法通过pandas.DataFrame.to_parquet正确传递所有参数,因此您需要使用以下代码编写parquet文件:

import pyarrow as pa
import pyarrow.parquet as pq

df = ..some DataFrame..
table = pa.Table.from_pandas(df)
pq.write_table(table, 'filename.parquet')

【讨论】:

  • 谢谢。我已经在使用 pyarrow 但这些 coerce_timestamps='ms', allow_truncated_timestamps=True 帮助我正确解析它
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 2019-12-12
  • 1970-01-01
  • 2020-02-01
  • 2023-03-22
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多