我的问题是关于在数据库中传递参数的小部件。我在一个笔记本中使用小部件来设置参数。然后,我从其他笔记本运行这个初始笔记本。我希望将所选参数拉入。 例如,在Notebook 1中我有: dbutils.widgets.dropdown(“start_year”,“2011”,[str(x)for x in range(2008,2021)],“Earliest year”) START_YEAR = dbutils.widgets.get( “起始年份”) print(“start_year is”+ dbutils.widgets.get(“start_year”))
print语句正确打印用户选择的任何年份。
在使用%run运行Notebook 1的Notebook 2中,无论选择什么,它都只会打印默认年份,在本例中为2011。我究竟做错了什么?谢谢!
答案 0 :(得分:0)
From the widget docs(始终在底部):
如果您运行包含小部件的笔记本,则指定的笔记本将以小部件的默认值运行。您还可以将值传递给小部件。例如:
None
您是否考虑过将“ notebook 1”设置为至少暂时将值存储在dbfs中而不是变量中?然后,您可以检索在“笔记本1”中设置的任何内容。
即假设用户必须访问并在笔记本1中设置参数
笔记本1
%run /path/to/notebook $X="10" $Y="1"
笔记本2
start_year=dbutils.widgets.get("start_year")
myTmpTxt = "The start_year is " + dbutils.widgets.get("start_year")
print(myTmpTxt)
with open('/dbfs/mnt/tmp/tmpStoreYear.txt', 'w') as savedYear:
savedYear.write(myTmpTxt)
此外,还有一个选项可以使用openQuery = open('/dbfs/mnt/tmp/tmpStoreYear.txt', 'rb')
openQuery.read()
(docs)指定窗口小部件参数
但是,它仍然作为单独的作业运行,并且值不会导入到“笔记本2”中。
希望这会有所帮助!