Databricks:如何获取当前笔记本的路径?

Databricks: How do I get path of current notebook?

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

建议:

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

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

有什么建议吗?

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

试试这个来检查。

%sh
pwd
ls

如果您想访问某些文件或代码,您可以将其上传 DBFS and access it. If it is code, you can compile it to a .jar(java, Scala) or an .egg(python) and attach the library 到您 运行 安装笔记本所在的集群。

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

  1. 转到工作区
  2. 如果笔记本在特定的用户文件夹中。点击用户
  3. 点击特定用户@org.dk
  4. 然后在笔记本名/my_test_notebook

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

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

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

使用 Databricks 访问文件API

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

1。阅读 Databricks Workspace 的文档 API

Databricks API Documentation

2。生成 API 令牌并获取笔记本路径

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

  1. 选择'User Settings'
  2. 选择'Generate New Token'
  3. 在 Databrick 文件资源管理器中,“右键单击”并选择“复制文件路径”

3。从 Databricks 下载笔记本

如果要访问笔记本文件,可以使用 curl 调用下载它。如果您位于 Databricks notebook 中,则可以使用 cell magic %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}"

对于 Scala,它是:

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

对于Python:

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