如何动态获取 Databricks Notebook 的路径?
Posted
技术标签:
【中文标题】如何动态获取 Databricks Notebook 的路径?【英文标题】:How to get the path of the Databricks Notebook dynamically? 【发布时间】:2019-06-29 21:39:52 【问题描述】:请不要为 IPython/Jupyter 笔记本提供解决方案。技术不同。
我想动态获取我的 Databricks 笔记本的路径。这是我可以从 UI“复制文件路径”中得到的,如下所示。我无法使用__file__
,因为这给了我错误。
NameError: name '__file__' is not defined
【问题讨论】:
@Evgeny 不,不是。我的问题是针对 Databricks。 这个问题是关于数据块的,它是一个与引用的“重复”完全不同的平台。 【参考方案1】:每个笔记本都有所谓的“上下文”,其中包含很多关于环境的信息,包括 HTTP 路径、主机名等。它可以用 Python dict 的形式检索(转换为 JSON 并返回更简单)而不是通过.get
函数获取字段):
import json
ctx = json.loads(dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson())
在ctx
字典中有一个名为extraContext
的子字典,其中包含您需要的字段notebook_path
:
nb_path = ctx['extraContext']['notebook_path']
【讨论】:
【参考方案2】:如果有类似的东西可供您使用,可以通过检查globals()
和locals()
找到,例如
print(globals())
在我的情况下,我发现的最接近的是:
_dh
例如:
print(_dh)
# ['/media/win10/Users/norok2/Downloads']
【讨论】:
对于 Databricks,它给出了['/databricks/driver']
,这不是我的预期输出。
您询问过 DataBricks 客户服务吗?这可能是你最好的选择。
我使用的是社区版的 DBR。我认为他们不会有帮助。
嗨@AnirbanNag'tintinmj' 您可以使用他们的REST API 检索笔记本路径:docs.databricks.com/api/latest/workspace.html#list 但是,您提到您使用的是社区版本。因此,请先尝试调用 API 来确认您是否有权访问 REST API。
我想获取我正在编写代码的笔记本路径。所以我可以用它来记录日志。以上是关于如何动态获取 Databricks Notebook 的路径?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 Azure Databricks 笔记本运行详细信息
Databricks/Spark SQL - 如何在地图类型字段中获取数据
如何在 databricks 工作区中使用 python 获取 azure datalake 存储中存在的每个文件的最后修改时间?