来自 Azure 数据工厂或本地 if 语句的 databricks Python notebook

databricks Python notebook from azure data factory or locally if statement

我有一个 Databricks Python 笔记本,它使用以下方法从 ADF 读取参数:

Program_Name = dbutils.widgets.get("Program_Name")

是否有 IF 语句或我可以在笔记本代码中执行的类似操作,这样当我以交互方式 运行 笔记本时,它会用简单的赋值代替对 dbutils 的调用?从逻辑上讲,我想要这样的东西:

if running in ADF:
   Program_Name = dbutils.widgets.get("Program_Name")
else:
   Program_Name = 'ABC123'

如果这样的事情是可能的,那么每次我修改笔记本的其余部分时都必须注释掉 dbutils 调用的替代方案 :) 我已经做过类似的事情,因此脚本可以 运行 从 Jupyter/PyCharm 或从命令行,但我不知道有什么告诉 python 解释器它是从 ADF 调用的。

非常感谢!

当 运行 来自 ADF 时,您可以使用前缀调用笔记本。 例如,您可以使用 Program_Name = "ADF_prog_name"

调用笔记本
Program_Name = dbutils.widgets.get("Program_Name")
if not(Program_Name.contains('ADF')):
   Program_Name = 'ABC123'

与其捕获异常,不如显式创建小部件并设置默认值更容易(参见 docs)。

dbutils.widgets.text("Program_Name", "ABC123", "Program name")
Program_Name = dbutils.widgets.get("Program_Name")

这有以下好处:

  1. 代码更简单 - 您无需执行任何操作 try/catch
  2. 如有必要,您可以传递另一个程序名称,即使您 运行 notebook 交互