使用 Python 和 R 模块

本文介绍如何使用相对路径导入存储在工作区文件中的自定义 Python 和 R 模块以及 Databricks 笔记本。 工作区文件有助于实现更紧凑的开发生命周期,使你能够将代码模块化将 %run 命令转换为 import 语句,并将 Python wheel 文件重构为联合版本化的模块。 还可以使用内置的 Databricks Web 终端来测试代码

注意

在 Databricks Runtime 14.0 及更高版本中,本地执行的代码的默认当前工作目录 (CWD) 是包含正在运行的笔记本或脚本的目录。 这是 Databricks Runtime 13.3 LTS 及更低版本的行为更改。 请参阅什么是默认的当前工作目录?

导入 Python 和 R 模块

重要

在 Databricks Runtime 13.0 及更高版本中,添加到 Python sys.path 的目录或结构化为 Python 包的目录会自动分发到群集中的所有执行程序。 在 Databricks Runtime 12.2 LTS 及更低版本中,添加到 sys.path 的库必须显式安装在执行程序上。

在 Databricks Runtime 11.2 及更高版本中,笔记本的当前工作目录会自动添加到 Python 路径。 如果正在使用 Repos,则会添加根存储库目录。

若要从另一个目录导入模块,则必须将包含该模块的目录添加到 sys.path。 可以使用相对路径指定目录,如以下示例所示:

import sys
import os
sys.path.append(os.path.abspath('..'))

从存储在工作区文件中的模块导入函数,如同从另存为群集库或笔记本范围的库的模块导入一样:

Python

from sample import power
power.powerOfTwo(3)

R

source("sample.R")
power.powerOfTwo(3)

重要

使用 import 语句时,如果存在多个同名库,Databricks 将遵循设置的优先级。 请参阅 Python 库优先级

Python 模块的自动加载

如果要在开发 Python 代码时编辑多个文件,可以在任何笔记本单元或 Python 文件中使用以下命令,以强制重新加载所有模块:

%load_ext autoreload
%autoreload 2

请注意,自动加载仅适用于驱动程序,并且不会将代码重新加载到 UDF 的执行程序中。

重构代码

进行代码开发的最佳做法是将代码模块化,以便轻松重用。 可以通过工作区文件创建自定义 Python 文件,并使用 import 语句使这些文件中的代码在笔记本中可用。

要将笔记本代码重构为可重用文件,请执行以下操作:

  1. 为你的代码创建一个新的源代码文件。
  2. 将 Python 导入语句添加到笔记本中,以使新文件中的代码可用于笔记本。

%run 命令迁移

如果使用 %run 命令使在笔记本中定义的 Python 或 R 函数可用于其他笔记本,或是在群集上安装自定义 .whl 文件,请考虑将这些自定义模块为工作区文件。 通过这种方式,可以使笔记本和其他代码模块保持同步,从而确保笔记本始终使用正确的版本。

通过 %run 命令可以将一个笔记本包含在另一个笔记本中,通常用于使支持 Python 或 R 代码可供笔记本使用。 在此示例中,名为 power.py 的笔记本包含以下代码。

# This code is in a notebook named "power.py".
def n_to_mth(n,m):
  print(n, "to the", m, "th power is", n**m)

随后可以使用 %run 命令使 power.py 中定义的函数可供其他笔记本使用:

# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)

使用工作区文件,可以直接导入包含 Python 代码的模块并运行函数。

from power import n_to_mth
n_to_mth(3, 4)

将 Python .whl 文件重构到相对库

可以在群集上安装自定义 .whl 文件,然后将其导入附加到该群集的笔记本中。 对于经常更新的代码,此过程可能十分繁琐,而且容易出错。 通过工作区文件,可以将这些 Python 文件保留在与使用代码的笔记本相同的目录中,从而确保笔记本始终使用正确的版本。

有关打包 Python 项目的详细信息,请参阅此教程

使用 Azure Databricks Web 终端进行测试

可以使用 Azure Databricks Web 终端来测试对 Python 或 R 代码所做的修改,而无需将文件导入笔记本并执行该笔记本。

  1. 打开 Web 终端
  2. 切换到目录:cd /Workspace/Users/<path-to-directory>/
  3. 运行 Python 或 R 文件:python file_name.pyRscript file_name.r