![](/img/trans.png)
[英]How to get the runID or processid in Azure DataBricks?
[英]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 僅允許str
到str
的作業參數映射,因此鍵和值將始終是字符串。
請注意,如果筆記本以交互方式運行(而不是作為作業),則 dict 將為空。 getCurrentBinding()
方法似乎也適用於獲取筆記本的任何活動小部件值(以交互方式運行時)。
要獲取jobId
和runId
,您可以從包含該信息的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 的官方文檔中有很好的描述。 下面,我將詳細說明您到達那里必須采取的步驟,這很容易。
創建或使用必須接受某些參數的現有筆記本。 我們想知道job_id
和run_id
,我們還要添加兩個用戶定義的參數environment
和animal
。
# 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)
現在讓我們 go 到 Workflows > Jobs 來創建一個參數化的工作。 確保您 select 是正確的筆記本並在底部指定作業的參數。 根據文檔,我們需要為job_id
和run_id
的參數值使用大括號。 對於其他參數,我們可以自己選擇一個值。
注意:不允許直接從筆記本獲取job_id
和run_id
的原因是出於安全原因(正如您在嘗試訪問上下文屬性時從堆棧跟蹤中看到的那樣)。 在筆記本中,您處於不同的上下文中,這些參數處於“更高”的上下文中。
運行作業並觀察它輸出如下內容:
dev squirrel 137355915119346 7492 Command took 0.09 seconds
您甚至可以在筆記本本身中設置默認參數,如果您運行筆記本或者筆記本是從沒有參數的作業中觸發的,就會使用這些參數。 這使測試更容易,並允許您默認某些值。
# 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()
最后但同樣重要的是,我在不同的集群類型上對此進行了測試,到目前為止我沒有發現任何限制。 我當前的設置是:
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.