在 python 中的数据块笔记本中列出所有小部件(即使那些没有被覆盖)

问题描述 投票:0回答:1

我想获得笔记本中使用的小部件的完整列表(即使那些没有被覆盖)。

如果您直接运行笔记本,这个线程示例工作正常,但如果您从 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'}

Result Image

python databricks azure-databricks aws-databricks
1个回答
0
投票

在 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 的值。 enter image description hereenter image description here

© www.soinside.com 2019 - 2024. All rights reserved.