如何在气流中运行Jupyter Notebook

时间:2018-07-28 17:38:48

标签: jupyter airflow

我的代码是用jupyter编写的,并保存为 .ipynb 格式。

我们想利用气流安排执行时间并定义依赖项。

如何在气流中执行笔记本?

我知道我可以先将它们转换为python文件,但是动态生成的图形将很难处理。

有没有更简单的解决方案?谢谢

3 个答案:

答案 0 :(得分:5)

我们之前曾遇到此问题,并花了几天的时间来解决它。 我们将其打包为docker文件并发布在github https://github.com/michaelchanwahyan/datalab上。

这是通过修改开源软件包 nbparameterize 并集成传递的参数(例如 execution_date )来完成的。动态生成的图形也可以更新并保存在笔记本内部。

执行时

  1. 笔记本将被读取并注入参数
  2. 笔记本被执行,输出将覆盖原始路径

此外,它还安装并配置了常用工具,例如spark,keras,tensorflow等。

答案 1 :(得分:1)

另一种选择是使用 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

答案 2 :(得分:0)

您也可以使用airflow + papermill的组合。

造纸厂

Papermill是用于运行具有以下参数的jupyter笔记本的工具:https://github.com/nteract/papermill 运行jupyter笔记本非常容易,您可以通过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定义中设置相同的input / output / paramters参数,并使用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 }}!"}
)