[英]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.