4 回答

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 則會面臨很少維護者的風險。

TA貢獻1874條經驗 獲得超12個贊
正如您所建議的,可以通過 Papermill 在 Airflow 管道中使用 Jupyter Notebooks。然而,Airflow 的優點之一是您可以將管道分成彼此獨立的離散步驟,因此如果您決定在一個 Jupyter Notebook 中編寫整個管道,那么這就違背了使用 Airflow 的目的。
因此,假設每個獨立的ETL 步驟都位于單獨的 Jupyter Notebook 中,您可以嘗試以下操作:
為每個步驟創建一個 Jupyter Notebook。例如,,,
copy_data_from_s3
(cleanup_data
3load_into_database
個步驟,每個步驟一個筆記本)。確保每個筆記本均按照 Papermill說明進行參數化。這意味著,向每個單元添加一個標簽來聲明可以從外部參數化的變量。
確保 Airflow 可以找到這些筆記本(例如,與 DAG 所在的文件夾位于同一文件夾中)
編寫將使用 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)

TA貢獻1993條經驗 獲得超6個贊
Airflow 有一個造紙廠操作員,但開發經驗不是很好。Airflow 中基于 Python 的 DAG 的主要問題之一是它們在同一 Python 環境中執行,一旦擁有多個 DAG,就會導致依賴問題。
如果您愿意嘗試新工具,它可以編排基于筆記本的管道(它在幕后使用 papermill)。您可以在本地開發并導出到 Kubernetes 或 Airflow。

TA貢獻1817條經驗 獲得超6個贊
為什么你想要 ETL 作業作為 jupyter 筆記本。您看到什么優勢?筆記本通常用于使用實時數據構建漂亮的文檔。ETL 作業應該是在后臺運行且自動化的腳本。
為什么這些工作不能是普通的 python 代碼而不是筆記本?
此外,當您使用 PapermillOperator 運行筆記本時,運行的輸出將是保存在某處的另一個筆記本。不斷檢查這些輸出文件并不是那么友好。
我建議用純 Python 編寫 ETL 作業并使用 PythonOperator 運行它。這更加簡單并且更容易維護。
如果您想使用筆記本電腦的精美功能,那就是另一回事了。
添加回答
舉報