Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Athena为拼花文件中的时间戳字段返回错误的值_Python_Amazon Web Services_Amazon S3_Parquet_Amazon Athena - Fatal编程技术网

Python Athena为拼花文件中的时间戳字段返回错误的值

Python Athena为拼花文件中的时间戳字段返回错误的值,python,amazon-web-services,amazon-s3,parquet,amazon-athena,Python,Amazon Web Services,Amazon S3,Parquet,Amazon Athena,我在这里主要转述我所看到的一个问题,希望stackoverflow社区的回答/解释比论坛上的讨论更全面、更具启发性 以下是我对这个问题的经验: 我使用pandas从python中的数据帧创建拼花文件,并使用pandas.to_datetime将字段/列say birth转换为datetime64[ns]。这个过程的这一部分似乎完美无瑕,因为我可以使用pandas.read\u parquet读取拼花文件,并获得我期望的结果,即在datetime中输入的日期。 然而,当我将所述拼花文件加载到AWS

我在这里主要转述我所看到的一个问题,希望stackoverflow社区的回答/解释比论坛上的讨论更全面、更具启发性

以下是我对这个问题的经验: 我使用pandas从python中的数据帧创建拼花文件,并使用pandas.to_datetime将字段/列say birth转换为
datetime64[ns]
。这个过程的这一部分似乎完美无瑕,因为我可以使用
pandas.read\u parquet
读取拼花文件,并获得我期望的结果,即在datetime中输入的日期。 然而,当我将所述拼花文件加载到AWS并在其上放置一个
athena
表时,读取相同的生日列会产生垃圾日期,这些日期与拼花文件中的日期完全不匹配。例如:

t=pandas.DataFrame([['Haiti',pandas.to_datetime('1804-01-01')]),columns=['Country','Independence']))
t、 至拼花地板(“s3:///tmp/t.parquet”)
如果不存在,则创建外部表default.mytable(
`国家`字符串,
`独立时间戳
)
行格式SERDE'org.apache.hadoop.hive.ql.io.parquet.SERDE.ParquetHiveSerDe'
具有serdeproperty(
'序列化.格式'='1'
)位置's3:///tmp/'
TBLProperty('has_encrypted_data'='false');
从“默认值”中选择*。“mytable”限制为10;

您可以强制使用雅典娜能够理解的格式,使用“强制时间戳”来书写拼花地板:

t=pandas.DataFrame([['Haiti',pandas.to_datetime('1804-01-01')]),columns=['Country','Independence']))
t、 到拼花地板(“s3:///tmp/t.parquet”,强制时间戳为ms”)
如果不存在,则创建外部表default.mytable(
`国家`字符串,
`独立时间戳
)
行格式SERDE'org.apache.hadoop.hive.ql.io.parquet.SERDE.ParquetHiveSerDe'
具有serdeproperty(
'序列化.格式'='1'
)位置's3:///tmp/'
TBLProperty('has_encrypted_data'='false');
从“默认值”中选择*。“mytable”限制为10;

这是拼花地板值被存储为微秒,但被解释为毫秒,因此返回错误的值。您应该向AWS支持部门报告此情况。另外,由于雅典娜是基于普雷斯托的,你也可以提交一个问题。@PiotrFindeisen,谢谢。我发布了.pandas 1.1.4+fastparquet 0.4.1:pandas/io/parquet.py中的错误,函数write()“
TypeError:write()获取了一个意外的关键字参数“强制时间戳”
我正在使用pyarrow,以使熊猫能够读/写拼花。我猜kwarg
强制时间戳是由pyarrow处理的,但不是fastparquet。你能用pyarrow尝试解决方案吗?我找到了使用fastparquet的解决方案。我通过了kwarg times=“int96”to df.to_parquet()生成了一个具有int96 datetime格式的拼花文件。雅典娜中的datetimes现在与我从pandas中输入的对应。
|Country | Independence|
|--------|-------------|
|Haiti   | 1804-01-01  |
|Country | Independence             |
|--------|--------------------------|
|Haiti   |-164033-12-18 00:00:00.000|
|Country | Independence|
|--------|-------------|
|Haiti   | 1804-01-01  |
|Country | Independence          |
|--------|-----------------------|
|Haiti   |1804-01-01 00:00:00.000|