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

4

在使用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 中使函数与笔记本本身分离?


1
我对 PySparkSparkR 更有经验,但我找到的所有资料似乎都表明您需要首先通过 GUI 或脚本将软件包安装到集群中。也许 这个链接 可以帮助您? - SkippyNBS
@SkippyNBS 这个链接很有趣。然而,如果没有太多自定义函数,似乎这是一种过度设计。例如,在我的情况下,我只使用两个自定义函数来爬取API;重载在 Spark 中运行。另外一个我感兴趣的问题是如何在 Azure DevOps 中为tarballs保持版本控制。 - Jon Nagra
1个回答

3
如果我正确理解了您的问题,您可以使用相对路径。
注意:我不确定您是否正在寻找等效于“here”库的东西。我没有看到类似的东西,但是相对路径确实有效。
请参阅:

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

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

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

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

注意:您不能使用 %run 运行 Python 文件并将在该文件中定义的实体导入笔记本。要从 Python 文件导入,您必须将文件打包到 Python 库中,从该 Python 库创建 Azure Databricks library,并将库安装到您用于运行笔记本的群集中

示例

假设您有 notebookA 和 notebookB。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

如需了解更复杂的笔记本间交互,请参阅笔记本工作流程


非常感谢您提供如此详细的答案。在接受答案之前,我将测试这种方法,但我相信它会完美地完成工作。我还将查看笔记本工作流程,因为它们似乎非常有用。 - Jon Nagra
Jon - 不用担心,我总是乐意并愿意提供帮助。这对我有用,数据是从文档中提取的。希望它能解决你的问题。保重。 - Technophobe01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接