【问题标题】:How can I reference the path of a notebook in Databricks/what is %run doing?如何在 Databricks 中引用笔记本的路径/%run 在做什么?
【发布时间】:2018-11-19 03:51:26
【问题描述】:

我对 Databricks 中的 %run 魔术命令很熟悉,但是这些笔记本实际上在哪里?

使用 %sh pwd 的根目录似乎是 /databricks/driver。让 Python 查找笔记本路径(例如,subprocess.call([the/notebook/path]) 失败,因为它在此根目录中查找笔记本路径并且显然是空的。笔记本必须位于其他地方,但在哪里? %run 调用什么路径来查找笔记本?

作为参考,我正在尝试在 Databricks 中实现 pytest,并且 pytest.main() 应该允许我在笔记本本身中运行测试,而不是典型的命令行方法......如果它可以找出在哪里笔记本还活着。

【问题讨论】:

    标签: python databricks


    【解决方案1】:

    我一直在寻找同样的东西,在深入研究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
    

    【讨论】:

      【解决方案2】:

      你可以使用Scala根据https://docs.azuredatabricks.net/user-guide/faq/get-notebook-path.html获取当前的Notebook Path。对于 Python,您需要通过 Scala 和 Widget 的解决方法,如同一常见问题解答中所述:

      %scala
      dbutils.widgets.text("notebook", dbutils.notebook.getContext().notebookPath.get)
      

      并在 python 中阅读:

      %python
      dbutils.widgets.get("notebook")
      

      【讨论】:

        【解决方案3】:

        基于@Martin 的回答,但不使用小部件(它会创建您可能不想要的 UI 元素):

        %scala
        spark.conf.set("nb.path", dbutils.notebook.getContext().notebookPath.get)
        

        然后:

        %python
        path = spark.conf.get("nb.path")
        

        【讨论】:

        • 你可以直接在 Python 中使用上下文而不需要 Scala。查看@Nick 的回答
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 1970-01-01
        • 2022-11-26
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多