如何将脚本路径作为 databricks 笔记本中的变量传递给 %run magic 命令?

ARC*_*row 10 python pyspark jupyter-notebook databricks

我想使用另一个笔记本在数据块中运行笔记本%run。另外,我希望能够将我正在运行的笔记本的路径作为参数发送到主笔记本。
不使用的原因dbutils.notebook.run是我将嵌套字典存储在调用的笔记本中,并且我想在主笔记本中使用它们。

我正在寻找类似的东西:

path = "/References/parameterDefinition/schemaRepository"
Run Code Online (Sandbox Code Playgroud)
%run <path variable>
Run Code Online (Sandbox Code Playgroud)

Kar*_*raj 5

%run和等魔术命令%fs不允许传入变量。

解决方法是你可以dbutils像这样使用dbutils.notebook.run(notebook, 300 ,{})

  • 不使用 dbutils.notebook.run 的原因是我在调用的笔记本中存储了大量嵌套的字典,并且我想在主笔记本中使用它们。 (2认同)

Ale*_*Ott 1

不幸的是,不可能将路径%run作为变量传递。您只能将变量作为参数传递,并且只能与小部件结合使用 - 您可以在这个答案中看到示例。在这种情况下,您可以将所有定义放在一个笔记本中,并且根据传递的变量,您可以重新定义字典。

未来几个月将推出一项新功能(大约,请参阅公共路线图网络研讨会了解更多详细信息),该功能将允许使用该语句将笔记本导入为库import您可以通过使用Workspace API 的 Export 命令将笔记本导出到磁盘上的文件、解码数据并导入文件内容来模拟相同的功能,例如,如果您有使用module1内容调用的笔记本

my_cool_dict = {"key1": "abc", "key2": 123}
Run Code Online (Sandbox Code Playgroud)

然后您可以按如下方式导入它:

import requests
import base64
import os


api_url = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()
host_token = "your_PAT_token"

path = "/Users/..../module1"

# fetch notebook
response = requests.get(f"{api_url}/api/2.0/workspace/export",
    json = {"format": "SOURCE", "path": path},
    headers={"Authorization": f"Bearer {host_token}"}
  ).json()

# decode base64 encoded content
data = base64.b64decode(response["content"].encode("ascii"))

# write the file & __init__.py, so directory will considered a module
dir = os.path.join("/tmp","my_modules")
if not os.path.exists(dir):
    os.mkdir(dir)

with open(os.path.join(dir, os.path.split(path)[-1]+".py"), "wb") as f:
  f.write(data)
with open(os.path.join(dir, "__init__.py"), "wb") as f:
  f.write("\n".encode("ascii"))

# add our directory into system path
import sys
sys.path.append(dir)

# import notebook
from module1 import my_cool_dict
Run Code Online (Sandbox Code Playgroud)

看到我们得到了变量:

在此输入图像描述