簡體   English   中英

如何在 Databricks notebook 中獲取運行參數和 runId?

[英]How do you get the run parameters and runId within Databricks notebook?

將 Databricks 筆記本作為作業運行時,您可以指定可在筆記本代碼中使用的作業或運行參數。 但是,文檔中並不清楚您實際上是如何獲取它們的。 我希望能夠獲取所有參數以及作業 ID 和運行 ID。

作業/運行參數

當筆記本作為作業運行時,可以使用 Databricks 自動提供和導入的dbutils package 將任何作業參數作為字典獲取。 這是代碼:

run_parameters = dbutils.notebook.entry_point.getCurrentBindings()

如果作業參數是{"foo": "bar"} ,那么上面代碼的結果會為您提供 dict {'foo': 'bar'} 請注意,Databricks 僅允許strstr的作業參數映射,因此鍵和值將始終是字符串。

請注意,如果筆記本以交互方式運行(而不是作為作業),則 dict 將為空。 getCurrentBinding()方法似乎也適用於獲取筆記本的任何活動小部件值(以交互方式運行時)。

獲取jobId和runId

要獲取jobIdrunId ,您可以從包含該信息的dbutils獲取上下文 json。 (改編自databricks論壇):

import json
context_str = dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson()
context = json.loads(context_str)
run_id_obj = context.get('currentRunId', {})
run_id = run_id_obj.get('id', None) if run_id_obj else None
job_id = context.get('tags', {}).get('jobId', None)

所以在上下文 object 中, runId的鍵路徑是currentRunId > id ,而jobId的鍵路徑是tags > jobId

如今,您可以通過小部件 API 輕松地從作業中獲取參數。這在 Databricks 的官方文檔中有很好的描述。 下面,我將詳細說明您到達那里必須采取的步驟,這很容易。

  1. 創建或使用必須接受某些參數的現有筆記本。 我們想知道job_idrun_id ,我們還要添加兩個用戶定義的參數environmentanimal

     # Get parameters from job job_id = dbutils.widgets.get("job_id") run_id = dbutils.widgets.get("run_id") environment = dbutils.widgets.get("environment") animal = dbutils.widgets.get("animal") print(job_id) print(run_id) print(environment) print(animal)
  2. 現在讓我們 go 到 Workflows > Jobs 來創建一個參數化的工作。 確保您 select 是正確的筆記本並在底部指定作業的參數。 根據文檔,我們需要為job_idrun_id的參數值使用大括號。 對於其他參數,我們可以自己選擇一個值。

注意:不允許直接從筆記本獲取job_idrun_id的原因是出於安全原因(正如您在嘗試訪問上下文屬性時從堆棧跟蹤中看到的那樣)。 在筆記本中,您處於不同的上下文中,這些參數處於“更高”的上下文中。

  1. 運行作業並觀察它輸出如下內容:

     dev squirrel 137355915119346 7492 Command took 0.09 seconds
  2. 您甚至可以在筆記本本身中設置默認參數,如果您運行筆記本或者筆記本是從沒有參數的作業中觸發的,就會使用這些參數。 這使測試更容易,並允許您默認某些值。

     # Adding widgets to a notebook dbutils.widgets.text("environment", "tst") dbutils.widgets.text("animal", "turtle") # Removing widgets from a notebook dbutils.widgets.remove("environment") dbutils.widgets.remove("animal") # Or removing all widgets from a notebook dbutils.widgets.removeAll()
  1. 最后但同樣重要的是,我在不同的集群類型上對此進行了測試,到目前為止我沒有發現任何限制。 我當前的設置是:

     spark.databricks.cluster.profile serverless spark.databricks.passthrough.enabled true spark.databricks.pyspark.enableProcessIsolation true spark.databricks.repl.allowedLanguages python,sql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM