如何在Databricks中使用R Notebook中的相对路径?

时间:2019-07-04 13:26:06

标签: r relative-path databricks azure-databricks

R中工作时,我通常将函数存储在文件夹./R/

要将这些功能带到工作区,我求助于here::here()功能。对于一个小的脚本,我的代码将开始如下:

library(here)
source(here::here("R", "custom_function1.R"))
source(here::here("R", "custom_function2.R"))

通过这种方式,在同事之间共享项目非常简单。

我正在为项目使用Azure-Databricks Notebooks。使用here::here()时,该功能指向服务器。

是否有一种方法可以在Azure-Databricks Notebooks中定义相对路径,以使功能与Notebook本身分离?

1 个答案:

答案 0 :(得分:2)

如果我正确阅读了您的问题,则可以使用相对路径。

注意:但是,我不确定您是否正在寻找与here库相同的库。我没有看到与之等效的东西,但是相对路径确实有效。

请参阅:

https://docs.azuredatabricks.net/user-guide/notebooks/notebook-use.html#link-to-other-notebooks

从另一个笔记本运行一个笔记本

您可以使用%run <notebook> magic命令从另一个笔记本运行一个笔记本。这大致等效于本地计算机上Scala REPL中的:load命令或Python中的import语句。定义的所有变量在您当前的笔记本中可用。

%run必须单独位于一个单元格中,因为它可以内联运行整个笔记本。

  

注意您不能使用%run运行Python文件并导入实体   该文件中定义的内容放入笔记本中。要从Python文件导入   必须将文件打包到Python库中,创建一个Azure   该Python库中的数据块libraryinstall the library into the cluster用于运行笔记本。

示例

假设您有笔记本A和笔记本B。 notebookA包含一个具有以下Python代码的单元格:

x = 5

即使您没有在NotebookB中定义x,也可以在运行%run notebookA之后访问NotebookB中的x。

%run /Users/path/to/notebookA
print(x) # => 5

相对路径

要指定相对路径,请在其前面加上./或../。例如,如果NotebookA和NotebookB在同一目录中,则可以从相对路径运行它们。

%run ./notebookA
print(x) # => 5

因此

%run ../someDirectory/notebookA # up a directory and into another    
print(x) # => 5

有关笔记本之间更复杂的交互,请参见Notebook Workflows