【问题标题】:databricks Python notebook from azure data factory or locally if statement来自 Azure 数据工厂或本地 if 语句的 databricks Python 笔记本
【发布时间】:2023-03-17 21:35:01
【问题描述】:

我有一个 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 调用的。

非常感谢!

【问题讨论】:

    标签: python azure-data-factory databricks spark-notebook


    【解决方案1】:

    显式创建小部件并设置默认值(参见docs)更容易。

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

    这有以下好处:

    1. 代码更简单 - 您无需进行任何尝试/捕获
    2. 如有必要,即使您以交互方式运行笔记本,也可以传递另一个程序名称

    【讨论】:

    • :这是一个真的很酷的技巧!笔记本中的交互式参数 = 真棒!
    【解决方案2】:

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

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

    【讨论】:

    • 感谢 Axel:问题是对 dbutils 的调用会引发错误,因此“if”语句永远不会运行 - 但这让我意识到这是一个错误,而不是崩溃。如果您想编辑您的答案,该策略可以作为 try-except 而不是“if”语句。您的回答仍然引导我找到解决方案!
    猜你喜欢
    • 1970-01-01
    • 2022-06-30
    • 2020-07-09
    • 2022-08-19
    • 2021-11-19
    • 1970-01-01
    • 2022-07-27
    • 2022-11-16
    • 1970-01-01
    相关资源
    最近更新 更多