繁体   English   中英

我们如何将 dataframe 写入 AWS Athena 中的表?

[英]How can we write a dataframe to a table in AWS Athena?

我通读了 Pandas 的 AWS 文档,看来您应该能够将 dataframe 写入 Athena 的表中。 当我运行下面的代码时,我收到一条错误消息,上面写着“ValueError:需要超过 2 个值才能解包”。

import awswrangler as wr
import pandas as pd

df = pd.DataFrame({
"id": [1, 2, 3],
"value": ["foo", "boo", "zoo"],
"name": ["teddy", "timmy", "tommy"]
})
print(df)

wr.s3.to_parquet(
    df=df,
    path='s3://client/awsdatacatalog/',
    dataset=True,
    mode="overwrite",
    database="client_rs",
    table='newtable'
)
wr.s3.read_parquet(path, dataset=True)

知道这里可能有什么问题。 这看起来很简单,但无论如何,它不起作用。

https://readthedocs.org/projects/aws-data-wrangler/downloads/pdf/latest/

我尝试了与您完全相同的代码,但没有发现任何问题。 同样使用此脚本,您不会直接写入 Athena,而是将写入 Glue 目录,Athena 可以从中读取表信息并从 S3 检索数据。对我来说,这看起来像是版本问题,您可以使用以下应该修复的版本它给你。

使用的 python 版本:

prabhakar@MacBook-Pro Downloads % python3 --version
Python 3.9.6
prabhakar@MacBook-Pro D

使用的 awsdatawrangler 版本:

prabhakar@MacBook-Pro Downloads % pip3 freeze | grep awswrangler
awswrangler==2.16.1
prabhakar@MacBook-Pro Downloads % 

我使用的脚本与您使用的脚本完全相同,但表和数据库名称不同:

import awswrangler as wr
import pandas as pd

df = pd.DataFrame({
"id": [1, 2, 3],
"value": ["foo", "boo", "zoo"],
"name": ["teddy", "timmy", "tommy"]
})
print(df)

wr.s3.to_parquet(
    df=df,
    path='s3://testing/sf_73750110/',
    dataset=True,
    mode="overwrite",
    database="sampledb",
    table='newtable'
)
df = wr.s3.read_parquet("s3://testing/sf_73750110/", dataset=True)


df = wr.athena.read_sql_query("SELECT * FROM newtable", database="sampledb")
print(df.head())

下面是生成的 output ,其中我能够将镶木地板表写入 Glue 目录/s3 并使用 Athena 读取它:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM