zoukankan      html  css  js  c++  java
  • Databricks 第12篇:Notebook 工作流

    Databricks 集成了命令行,比如 %run,允许用户在一个Notebook中去执行指定的notebook,当运行 %run时,被调用的notebook会立即执行。

    %run <notebook_path_name>

    %run命令相当于Python语言中的import语句,在被调用notebook中定义的所有变量在当前的notebook中都可用。

    注意:%run命令必须独占一行。不能使用%run去执行Python文件,并把Python文件中定义的实体导入到当前notebook中。

    举个例子,有一个Python文件,NotebookA.py,包含以下代码:

    x = 5

    在NotebookB.py文件中,通过%run来执行NotebookA,就把变量x导入到当前的notebook中了。虽然NotebookB中并没有定义x,但是可以在NotebookB中访问x变量:

    %run /path/notebookA
    
    print(x) # => 5

    Notebook 工作流(Notebook Workflow)是 %run 的补充,因为Notebook Workflow能够把参数传递给被调用的Notebook,并从该Notebook中返回值。通过Notebook Workflow可以构建具有依赖项的复杂工作流和管道。 例如,可以获取目录中的文件列表并将名称传递给另一个Notebook ,而 %run 则无法做到这一点。 还可以根据Notebook 的返回值创建 if-then-else 工作流或使用相对路径调用其他Notebook 。

     Notebook Workflow主要有两个函数:

    dbutils.notebook.run(path: String, timeout_seconds: int, arguments: Map): String
    dbutils.notebook.exit("returnValue")

    1.执行Notebook

    dbutils.notebook.run() 方法的参数和返回值都是字符类型,该函数被执行后,会新建一个job,立即执行path参数指定的Notebook。

    • path参数指定notebook的路径,
    • timeout参数控制执行的超时,0表示没有时间限制。
    • arguments 参数用于设置widget的值,该widget的值将会覆盖默认值。

    举个例子,Notebook_C 有如下的widget:

    dbutils.widgets.text("datekey","20200701")
    startdatekey= int(dbutils.widgets.get("datekey"))

     当通过 dbutils.notebook.run() 调用Notebook_C时,可以向该widget来传参:

    dbutils.notebook.run("Notebook_C", 0, {"datekey": "20210701"})

    2,传递返回值

    在被调用的Notebook中,使用exit()函数向调用者返回信息,返回的是字符串类型:

    dbutils.notebook.exit("return_my_data")

    在调用者中,run()函数会得到返回的字符串: "return_my_data"。

    3,Notebook 工作流控制

    可以通过Python代码实现Notebook调用的工作流程的控制

    # Errors in workflows thrown a WorkflowException.
    
    def run_with_retry(notebook, timeout, args = {}, max_retries = 3):
      num_retries = 0
      while True:
        try:
          return dbutils.notebook.run(notebook, timeout, args)
        except Exception as e:
          if num_retries > max_retries:
            raise e
          else:
            print("Retrying error", e)
            num_retries += 1
    
    run_with_retry("LOCATION_OF_CALLEE_NOTEBOOK", 60, max_retries = 5)

    参考文档:

    Notebook workflows

    作者悦光阴
    本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    c实现二叉树
    C实现栈与队列
    c的链表实现
    LB_Keogh
    LB_Yi
    LB_Kim
    Lab7:同步互斥
    Lab6:进程的调度
    Lab45:进程和线程
    Lab3:虚拟内存管理
  • 原文地址:https://www.cnblogs.com/ljhdo/p/14252951.html
Copyright © 2011-2022 走看看