如何动态获取 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 存储中存在的每个文件的最后修改时间?

如何从 ADF 中的执行管道获取输出参数?

在 Spark 作业中获取 Databricks 集群 ID(或获取集群链接)

如何在 Azure Databricks SQL 中将字段值转换为逗号分隔