如何从s3直接读取excel文件与Pandas在气流dag?

uidvcgyl  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(174)

I am trying to read an excel file from s3 inside an aiflow dag with python, but it does not seem to work. It is very weird because it works when I read it from outside airflow with pd.read_excel(s3_excel_path).
我所做的:

  • 在airflow中设置AWS凭据(这很好用,因为我可以列出我的s3 bucket)
  • 在运行Airflow的Docker环境中安装panda、s3fs
  • Try to read the file with pd.read_excel(s3_excel_path)

正如我所说的,当我在Airflow之外尝试它时,它工作正常。而且,我没有得到任何错误,dag只是继续不确定地运行(在它应该读取文件的步骤),即使我等待20分钟,也没有任何React。
(我想avoir从s3下载文件,处理它,然后上传回s3,这就是为什么我试图直接从s3读取它)
注意:我不工作与csv以及。
EDIT : Likewise, I can't save my dataframe directly to S3 with df.to_csv('s3_path') in airflow dag while I can do it in python

t98cgbkg

t98cgbkg1#

要使用panda读取存储在S3中的数据文件,您有两种选择,一种是使用boto3(或AWS CLI)下载并读取本地文件,这是您不锁定的解决方案,另一种是使用panda支持的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

相关问题