Databricks小部件

时间:2018-06-13 19:07:35

标签: python widget databricks

我的问题是关于在数据库中传递参数的小部件。我在一个笔记本中使用小部件来设置参数。然后,我从其他笔记本运行这个初始笔记本。我希望将所选参数拉入。 例如,在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。我究竟做错了什么?谢谢!

1 个答案:

答案 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”中。

希望这会有所帮助!