【发布时间】:2018-07-28 17:38:48
【问题描述】:
我的代码是用 jupyter 编写的,并保存为 .ipynb 格式。
我们想使用气流来安排执行并定义依赖关系。
笔记本如何在气流中执行?
我知道我可以先将它们转换为 python 文件,但是动态生成的图形将难以处理。
有没有更简单的解决方案?谢谢
【问题讨论】:
我的代码是用 jupyter 编写的,并保存为 .ipynb 格式。
我们想使用气流来安排执行并定义依赖关系。
笔记本如何在气流中执行?
我知道我可以先将它们转换为 python 文件,但是动态生成的图形将难以处理。
有没有更简单的解决方案?谢谢
【问题讨论】:
您也可以使用airflow + papermill的组合。
Papermill 是一个运行 jupyter notebook 的工具,参数:https://github.com/nteract/papermill 运行一个 jupyter notebook 很简单,你可以通过 python 脚本来完成:
import papermill as pm
pm.execute_notebook(
'path/to/input.ipynb',
'path/to/output.ipynb',
parameters = dict(alpha=0.6, ratio=0.1)
)
或来自 CLI:
$ papermill local/input.ipynb s3://bkt/output.ipynb -p alpha 0.6 -p l1_ratio 0.1
它将从输入路径运行一个笔记本,在输出路径中创建一个副本,并在每次单元运行后更新此副本。
为了将它与 Airflow 集成,有一个专门的造纸厂操作员来运行参数化的笔记本:https://airflow.readthedocs.io/en/latest/howto/operator/papermill.html 您可以直接在 DAG 定义中设置相同的输入/输出/参数参数,并为 aifrlow 变量使用模板:
run_this = PapermillOperator(
task_id="run_example_notebook",
dag=dag,
input_nb="/tmp/hello_world.ipynb",
output_nb="/tmp/out-{{ execution_date }}.ipynb",
parameters={"msgs": "Ran from Airflow at {{ execution_date }}!"}
)
【讨论】:
我们之前遇到过这个问题,花了好几天才解决。 我们将其打包为 docker 文件并发布在 github 上https://github.com/michaelchanwahyan/datalab。
这是通过修改一个开源包nbparameterize并集成传递的参数来完成的,例如execution_date。动态生成的图表也可以在笔记本中更新和保存。
什么时候执行
此外,它还安装和配置了spark、keras、tensorflow等常用工具。
【讨论】:
另一种选择是使用 Ploomner(免责声明:我是作者)。它在引擎盖下使用造纸厂来构建多级管道。任务可以是笔记本、脚本、函数或它们的任意组合。您可以在本地运行、Airflow 或 Kubernetes(使用 Argo 工作流程)。
这是管道声明的样子:
tasks:
- source: notebook.ipynb
product:
nb: output.html
data: output.csv
- source: another.ipynb
product:
nb: another.html
data: another.csv
【讨论】: