亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Jupyter Notebooks 和 Papermill 輔助的 Airflow 中的 ETL

Jupyter Notebooks 和 Papermill 輔助的 Airflow 中的 ETL

互換的青春 2024-01-27 15:26:55
所以我的問題是,我在 Airflow 中構建 ETL 管道,但首先在 Jupyter 筆記本中真正開發和測試提取、轉換和加載功能。因此,我最終總是在 Airflow Python 操作員代碼和 Jupyter 筆記本之間來回復制粘貼,效率非常低!我的直覺告訴我,所有這一切都可以自動化?;旧?,我想在 Jupyter 中編寫我的提取、轉換和加載函數,并讓它們保留在那里,同時仍在 Airflow 中運行管道并顯示提取、轉換和加載任務,并進行重試和 Airflow 提供的所有好東西提供開箱即用的功能。Papermill 能夠對筆記本進行參數化,但我真的想不出這對我的情況有什么幫助。有人可以幫我把這些點聯系起來嗎?????
查看完整描述

4 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

具有任意數量的從屬筆記本(用作模板)的單個主 Jupyter 筆記本,使用 順序執行papermill.execute_notebook,應該足以自動化任何 ML 管道。

要在管道階段之間傳遞信息(從一個從屬筆記本到下一個),可以使用另一個 Netflix 包 ,它scrapbook允許我們在從屬筆記本中記錄 python 對象(因為它們是由 處理的papermill),然后檢索這些對象來自管道主機中的從屬設備(保存使用scrapbook.glue并讀取 -?scrapbook.read_notebook)。

從任何已完成的階段恢復也是可能的,但它需要將前一階段保存的必要輸入存儲在可從主節點訪問的可預測位置(例如,在本地主 JSON 文件或 MLflow 中)。

  • 備擇方案

由于管理成本(5 個容器,包括 2 個數據庫),Airflow 對于大多數 ML 團隊來說可能是一種殺傷力,而其他(非 Netflix)Python 包要么需要更多樣板文件(Luigi),要么需要額外的權限和執行器的自定義 docker 鏡像( Elyra),而 Ploomber 則會面臨很少維護者的風險。


查看完整回答
反對 回復 2024-01-27
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

正如您所建議的,可以通過 Papermill 在 Airflow 管道中使用 Jupyter Notebooks。然而,Airflow 的優點之一是您可以將管道分成彼此獨立的離散步驟,因此如果您決定在一個 Jupyter Notebook 中編寫整個管道,那么這就違背了使用 Airflow 的目的。

因此,假設每個獨立的ETL 步驟都位于單獨的 Jupyter Notebook 中,您可以嘗試以下操作:

  1. 為每個步驟創建一個 Jupyter Notebook。例如,,,copy_data_from_s3cleanup_data3load_into_database個步驟,每個步驟一個筆記本)。

  2. 確保每個筆記本均按照 Papermill說明進行參數化。這意味著,向每個單元添加一個標簽來聲明可以從外部參數化的變量。

  3. 確保 Airflow 可以找到這些筆記本(例如,與 DAG 所在的文件夾位于同一文件夾中)

  4. 編寫將使用 Papermill 參數化和運行筆記本的函數,每個步驟一個。例如:

import papermill as pm

# ...

# define DAG, etc.

# ...


def copy_data_from_s3(**context):

? ? pm.execute_notebook(

? ? ? ? ? ?"copy_data_from_s3_step.ipynb",

? ? ? ? ? ?"copy_data_from_s3_step.ipynb"

? ? ? ? ? ? parameters=dict(date=context['execution_date'])) # pass some context parameter if you need to

? ? ? ? )

最后,設置該步驟,也許作為 a (盡管如果您想從命令行運行 PapermillPythonOperator也可以使用 a )。要匹配上面的函數:BashOperator

copy_data = PythonOperator(dag=dag,

? ? ? ? ? ? ? ? ? ? ? ? ? ?task_id='copy_data_task',

? ? ? ? ? ? ? ? ? ? ? ? ? ?provide_context=True,

? ? ? ? ? ? ? ? ? ? ? ? ? ?python_callable=copy_data_from_s3)


查看完整回答
反對 回復 2024-01-27
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

Airflow 有一個造紙廠操作員,但開發經驗不是很好。Airflow 中基于 Python 的 DAG 的主要問題之一是它們在同一 Python 環境中執行,一旦擁有多個 DAG,就會導致依賴問題。

如果您愿意嘗試新工具,它可以編排基于筆記本的管道(它在幕后使用 papermill)。您可以在本地開發并導出到 Kubernetes 或 Airflow。



查看完整回答
反對 回復 2024-01-27
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

為什么你想要 ETL 作業作為 jupyter 筆記本。您看到什么優勢?筆記本通常用于使用實時數據構建漂亮的文檔。ETL 作業應該是在后臺運行且自動化的腳本。

為什么這些工作不能是普通的 python 代碼而不是筆記本?

此外,當您使用 PapermillOperator 運行筆記本時,運行的輸出將是保存在某處的另一個筆記本。不斷檢查這些輸出文件并不是那么友好。

我建議用純 Python 編寫 ETL 作業并使用 PythonOperator 運行它。這更加簡單并且更容易維護。

如果您想使用筆記本電腦的精美功能,那就是另一回事了。


查看完整回答
反對 回復 2024-01-27
  • 4 回答
  • 0 關注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號