我想获得笔记本中使用的小部件的完整列表(即使那些没有被覆盖)。
如果您直接运行笔记本,这个线程示例工作正常,但如果您从 Databricks 作业或 Azure 数据工厂运行笔记本,它就不会。
即:我用这些小部件创建了一个笔记本:a & b。我在 Databricks 作业中覆盖了“a”的值(使用“aaaa”),并让“b”具有默认值。
笔记本代码:
dbutils.widgets.text("a", "a")
dbutils.widgets.text("b", "b")
my_widgets = dbutils.notebook.entry_point.getCurrentBindings()
{key: my_widgets[key] for key in my_widgets}
作业执行结果:
Out[1]: {'a': 'aaaa'}
在 Databricks 笔记本中获取未被覆盖的小部件的完整列表。
你可以试试get_ipython(), globals(), locals()
上面的函数是用来获取notebook中的所有变量名
它使用 globals() 和 locals() 函数获取当前笔记本中的所有变量名,并将它们组合成一个集合。
from IPython.display import display
from dbutils.widgets import Widget
**Get all the variable names in the current notebook namespace**
all_vars = set(globals().keys()).union(set(locals().keys()))
**Filter for variables that are instances of dbutils.widgets.Widget**
widget_vars = [var_name for var_name in all_vars if isinstance(get_ipython().user_ns[var_name], Widget)]
**Get the widget instances from the variable names**
widgets_used = [get_ipython().user_ns[var_name] for var_name in widget_vars]
**Print the list of widgets.**
print(widgets_used)
从上面首先导入必要的库来处理小部件。
使用 get_ipython()、globals()、locals() 函数并使用 isinstance() 函数过滤此集合以查找作为 dbutils.widgets.Widget 实例的任何变量。
然后使用生成的变量名称列表在 get_ipython().user_ns 字典的帮助下从笔记本中检索小部件实例。
最后,代码将小部件列表打印到控制台。这种方法应该检索笔记本中使用的所有小部件,即使是那些没有被覆盖的小部件。
在您的情况下,由于您创建了两个名为 a 和 b 的小部件,因此您可以使用上面的代码检索这两个小部件,即使您已经覆盖了 Databricks 作业中 a 的值。