繁体   English   中英

如何在airflow dag中用pandas直接从s3读取excel文件?

[英]How to directly read excel file from s3 with pandas in airflow dag?

我正在尝试从带有 python 的 aiflow dag 中的 s3 读取一个 excel 文件,但它似乎不起作用。 这很奇怪,因为当我使用 pd.read_excel(s3_excel_path) 从外部 airflow 读取它时它起作用了。

我做了什么:

  • 在 airflow 中设置 AWS 凭据(这很好用,因为我可以列出我的 s3 存储桶)
  • 在我运行Airflow的Docker环境安装pandas、s3fs
  • 尝试使用 pd.read_excel(s3_excel_path) 读取文件

正如我所说,当我在 Airflow 之外尝试时,它会起作用。此外,我没有收到任何错误,dag 只是继续无限期地运行(在它应该读取文件的步骤)并且没有任何反应,即使我等20分钟。

(我想避免从 s3 下载文件,对其进行处理,然后将其上传回 s3,这就是我尝试直接从 s3 读取它的原因)

注意:我也不使用 csv。

编辑:同样,我不能将我的 dataframe 直接保存到 S3,在 airflow dag 中使用 df.to_csv('s3_path'),而我可以在 python 中保存

要使用 pandas 读取存储在 S3 中的数据文件,您有两种选择,使用 boto3(或 AWS CLI)下载它们并读取本地文件,这是您未锁定的解决方案,并使用 pandas 支持的 s3fs API:

import os

import pandas as pd

AWS_S3_BUCKET = os.getenv("AWS_S3_BUCKET")
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
AWS_SESSION_TOKEN = os.getenv("AWS_SESSION_TOKEN")

key = "path/to/excel/file"

books_df = pd.read_excel(
    f"s3://{AWS_S3_BUCKET}/{key}",
    storage_options={
        "key": AWS_ACCESS_KEY_ID,
        "secret": AWS_SECRET_ACCESS_KEY,
        "token": AWS_SESSION_TOKEN,
    },
)

要使用此解决方案,您需要安装s3fsapache-airflow-providers-amazon

pip install s3fs
pip install apache-airflow-providers-amazon

暂无
暂无

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

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