如何在Python中获取Databricks Notebook的全部Widget(含未覆盖项)
解决Databricks Job/ADF运行时无法获取未覆盖Widget默认值的问题
dbutils.notebook.entry_point.getCurrentBindings()的局限性在于:它仅会返回外部传入(即被覆盖)的Widget参数,不会包含未修改的默认值。这就是为什么你在Job或ADF中只覆盖a的值时,只能拿到{'a': 'aaaa'},而看不到b的默认值。
要获取所有Widget(包括未被覆盖的默认值),可以通过以下方式实现:
- 提前定义所有Widget的名称和对应默认值,存入一个字典;
- 基于这个字典批量创建Widget;
- 获取当前传入的绑定值后,将其与默认值字典合并——传入的值会覆盖对应键的默认值,最终得到完整的Widget集合。
完整代码示例:
# 定义所有Widget的名称与默认值 widget_defaults = { "a": "a", "b": "b" } # 批量创建Widget for widget_name, default_value in widget_defaults.items(): dbutils.widgets.text(widget_name, default_value) # 获取外部传入的绑定值 current_bindings = dbutils.notebook.entry_point.getCurrentBindings() # 合并默认值与传入值,传入值优先覆盖默认值 all_widgets = {**widget_defaults, **current_bindings} # 输出所有Widget的键值对 print(all_widgets)
如果使用其他类型的Widget(如下拉框dropdown、复选框checkbox等),只需调整创建Widget的方法,并确保widget_defaults中的值与对应Widget的默认值一致即可。
内容的提问来源于stack exchange,提问作者Dylan
相关产品推荐
相关产品推荐

