簡體   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