天天看點

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"))      
Databricks 第12篇:Notebook 工作流

 當通過 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

作者

:悅光陰

出處

:http://www.cnblogs.com/ljhdo/

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

繼續閱讀