如何通过 pandas 的 parquet 创建 Athena 桌子?

问题描述 投票:0回答:1

我从 pandas Dataframe 开始并保存为 parquet 格式,如下所示:

import pandas as pd

df = pd.DataFrame([
    {'abc': 1.231, 'xyz':2, 'jkl': False, 'idx': 'first row', 'date': '2023-12-01'},
    {'abc': 9.123, 'xyz':5, 'jkl': True, 'idx': '2nd row', 'date': '2023-12-04'}
])

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

df.to_parquet('x.parq')

当我使用

parquet-cli
检查架构时,它显示:

parq x.parq --schema

[出]:

# Schema 
 <pyarrow._parquet.ParquetSchema object at 0x7f9f4b365400>
required group field_id=-1 schema {
  optional double field_id=-1 abc;
  optional int64 field_id=-1 xyz;
  optional boolean field_id=-1 jkl;
  optional binary field_id=-1 idx (String);
  optional int64 field_id=-1 date (Timestamp(isAdjustedToUTC=false, timeUnit=microseconds, is_from_converted_type=false, force_set_converted_type=false));
}

然后将 parquet 文件保存到

s3://mybucket/
,当我尝试在 AWS Athena 中创建表时,例如

CREATE EXTERNAL TABLE IF NOT EXISTS `mydb`.`table1` (
  abc float, 
  xyz int, 
  jkl boolean,
  idx string,
  date date
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.paruqet.MapredParquetOutputFormat'
LOCATION 's3://mybucket/'
TBLPROPERTIES ('classification' = 'parquet');

查询运行成功并且没有显示错误。然后当我尝试查询该表时,

SELECT * from mydb.table1;

显示错误:

HIVE_CURSOR_ERROR: Failed to read Parquet file s3://mybucket/x.parq

CTAS 查询是否写错了?类型定义错误?

如何正确将 parquet 文件转换为可以查询的 Athena 表?

是否有更简单的方法将 pandas 数据框写入 parquet 或任何其他格式,以便可以轻松地将其读取为 athena 表?

pandas hive parquet amazon-athena
1个回答
0
投票

您可以改用适用于 Pandas 的 AWS 开发工具包。

wr.s3.to_parquet(
    df=df,
    path="s3://bucket/dataset/",
    dataset=True,
    database="my_db",
    table="my_table"
)

然后

wr.athena.read_sql_query(
    "SELECT * FROM my_table", 
    database="my_db", 
    ctas_approach=False
)

参考:https://aws-sdk-pandas.readthedocs.io/en/stable/tutorials/006%20-%20Amazon%20Athena.html

© www.soinside.com 2019 - 2024. All rights reserved.