13

Databricks 很聪明,但是您如何识别当前笔记本的路径?网站上的指南没有帮助。

它建议:

%scala
dbutils.notebook.getContext.notebookPath
res1: Option[String] = Some(/Users/user@org.dk/my_test_notebook)

这并没有给我完整的路径,而是一些无法从笔记本访问的文件夹结构的路径。我需要路径,这样我就可以在与.ipynb文件相同的文件夹中进行系统调用。

有什么建议么?

4

5 回答 5

12

您可以使用 dbutils 命令检索信息:

dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get()
于 2021-11-12T17:40:17.350 回答
3

笔记本不会留在驱动程序上。每当您运行一个单元格时,该单元格将被发送到当前的 spark 会话中执行。

试试这个来检查。

%sh
pwd
ls

如果你想访问一些文件或代码,你可以上传DBFS并访问它。如果是代码,您可以将其编译为 .jar(java, Scala) 或 .egg(python) 并将附加到运行 notebook 的集群。

于 2018-12-04T06:40:38.083 回答
1

对于 Scala,它是:

dbutils.notebook().getContext().notebookPath.get

对于 Python:

dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get()
于 2021-12-29T14:38:51.607 回答
0

您可以通过此步骤获得笔记本的路径,答案也在您问题的建议中。(假设您正在使用的笔记本是您的)

  1. 前往工作区
  2. 如果笔记本特别是用户文件夹。点击用户
  3. 单击特定的 user@org.dk
  4. 然后在笔记本名称 /my_test_notebook

所以你的最终路径变成 /Users/user@org.dk/my_test_notebook

于 2021-02-11T12:20:34.803 回答
0

使用 Databricks API 访问文件

我最终使用 Databricks API 将笔记本和其他文件下载和上传到/从 Databricks 解决了这个问题。

1. 阅读 Databricks Workspace API 的文档

Databricks API 文档

2. 生成 API 令牌并获取 Notebook 路径

在用户界面中执行以下操作以生成 API 令牌并复制笔记本路径:

  1. 选择“用户设置”
  2. 选择“生成新令牌”
  3. 在 Databrick 文件资源管理器中,“右键单击”并选择“复制文件路径”

3. 从 Databricks 下载笔记本

如果你想访问一个笔记本文件,你可以使用 curl-call 下载它。如果您位于 Databricks 笔记本中,则可以使用单元魔术 %sh 或使用系统调用 os.system('insert command') 简单地进行此调用。

curl --header "Content-Type: application/json" --request GET --data '{"path":"{/Users/myuser@myorg.com/notebook_to_download}","format":"JUPYTER"}' https://{replace_with_your_databaricks}/api/2.0/workspace/export -H "Authorization: Bearer {my_token}" | jq -r .content | base64 --decode > my_downloaded_notebook.ipynb

4. 将笔记本上传到 Databricks

您可以类似地使用以下 curl 调用从机器上传笔记本:

curl -n -F format=JUPYTER -F path="{/Users/myuser@myorg.com/uploaded_notebook}" -F language=PYTHON -F content=@{/my/local/notebook.ipynb} https://{replace_with_your_databaricks}/api/2.0/workspace/import -H "Authorization: Bearer {my_token}"
于 2021-12-13T09:08:32.817 回答