我熟悉 Databricks 中的 %run 魔法命令,但是笔记本实际上在哪里?
使用 %sh pwd 的 rootdir 似乎是 /databricks/driver。让 Python 查找笔记本路径(例如, subprocess.call([the/notebook/path]) 失败,因为它在此 rootdir 中查找笔记本路径并且显然是空的。笔记本必须位于其他地方,但在哪里? %run 调用什么路径来查找笔记本?
作为参考,我正在尝试在 Databricks 中实现 pytest,并且 pytest.main() 应该允许我在笔记本本身内运行测试来代替典型的命令行方法......如果它可以找出笔记本所在的位置.
我一直在寻找同样的东西,经过一些挖掘dbutils,这是我想出的解决方案:
import json
context = json.loads(dbutils.notebook.entry_point.getDbutils().notebook().getContext().toJson())
print(context['extraContext']['aclPathOfAclRoot']) # Base path
print(context['extraContext']['notebook_path']) # Notebook path
Run Code Online (Sandbox Code Playgroud)
您可以使用 Scala根据https://docs.azuredatabricks.net/user-guide/faq/get-notebook-path.html获取当前的 Notebook 路径。对于 Python,您需要通过 Scala 和 Widget 来解决问题,如同一常见问题解答中所述:
%scala
dbutils.widgets.text("notebook", dbutils.notebook.getContext().notebookPath.get)
Run Code Online (Sandbox Code Playgroud)
并用Python读取它:
%python
dbutils.widgets.get("notebook")
Run Code Online (Sandbox Code Playgroud)