使用 ipywidget 从另一个笔记本运行 Azure Databricks 笔记本

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

我正在尝试使用 dbutils.notebook.run 从另一个笔记本运行一个笔记本,如下所示:

import ipywidgets as widgets
from ipywidgets import interact
from ipywidgets import Box

button = widgets.Button(description='Run model')
out = widgets.Output()
def on_button_clicked(b):
    button.description = 'Run model'
    with out:
        dbutils.notebook.run("/mynotebookpath",60)

button.on_click(on_button_clicked)
widgets.VBox([button, out])

但是,我收到以下错误:

IllegalArgumentException:上下文无效。如果你打电话给这个 在主线程之外,您必须通过以下方式设置笔记本上下文 dbutils.notebook.setContext(ctx),其中 ctx 是从 主线程(和同一个单元格)

当我在单个单元格上执行

%run
甚至
dbutils.notebook.run("/mynotebook", 60)
在单个单元格上时,我可以很好地运行笔记本。但是我无法让它在 ipywidget 上下文中运行

python azure pyspark databricks ipywidgets
1个回答
0
投票

当我执行给定的代码时,我得到了同样的错误。但是,没有办法按照错误信息来使用

dbutils.notebook.setContext
,因为没有setContext属性。

enter image description here

  • 使用
    dbutils.notebook.run
    还会创建一个未命名的作业运行。因此,作为替代方案,您可以使用
    Jobs 2.0
    来运行笔记本。
  • 以下是您可以使用的代码:
import ipywidgets as widgets
import requests

response = None

def my_function(param):
    print(f"This is {param}")
    global response

    my_json = {"notebook_task": {"notebook_path": "/nb2"},"run_name": "execute notebook","timeout_seconds": 3600,"existing_cluster_id": "<cluster_id>"}   
    auth = {"Authorization": "Bearer <access_token>"}
    response = requests.post('https://<workspace_instance>/api/2.0/jobs/runs/submit', json = my_json, headers=auth).json()
    print(response)

button = widgets.Button(description="Run Model")
output = widgets.Output()

display(button, output)

def on_button_click(b):
    with output:
        print("button is clicked")
        my_function('in fuction')

button.on_click(on_button_click)

enter image description here

  • 您可以监视此运行并检查其执行情况。以下是我的笔记本的示例运行。

enter image description here

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