分享方式:


使用 Python 和 R 模組

本文說明如何使用相對路徑,將儲存在工作區檔案中的自定義 Python 和 R 模組與 Databricks 筆記本一起匯入。 工作區檔案可協助您更緊密的開發生命週期,讓您 將程式代碼模組化、 將 %run 命令轉換為匯入語句,並將 Python 轉輪檔案重構為共同版本模組。 您也可以使用內建的 Databricks Web 終端機來測試程序代碼

注意

在 Databricks Runtime 14.0 和更新版本中,本機執行之程式碼的預設目前工作目錄 (CWD) 是包含執行筆記本或指令碼的目錄。 這是 Databricks Runtime 13.3 LTS 和以下的行為變更。 請參閱預設的目前工作目錄是什麼?

匯入 Python 和 R 模組

重要

在 Databricks Runtime 13.3 LTS 和更新版本中,新增至 Python 的目錄,或結構化為 Python sys.path套件的目錄,會自動散發至叢集中的所有執行程式。 在 Databricks Runtime 12.2 LTS 中,新增至 sys.path 的連結庫必須明確安裝在執行程式上。

在 Databricks Runtime 11.3 LTS 和更新版本中,筆記本的目前工作目錄會自動新增至 Python 路徑。 如果您使用 Git 資料夾,則會新增根存放庫目錄。

若要從另一個目錄匯入模組,您必須將包含模組的目錄新增至 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 程式代碼時編輯多個檔案,您可以啟用 autoreload 延伸模組自動重載任何匯入的模組,讓命令執行會挑選這些編輯。 在任何筆記本資料格或 Python 檔案中使用下列命令來啟用 autoreload 擴充功能:

%load_ext autoreload
%autoreload 2

延伸 autoreload 模組只適用於 Spark 驅動程式進程,而且不會將程式代碼重載至 Spark 執行程式進程。 因為它只能在Spark驅動程式節點上運作,而不是執行Spark執行程式的節點,所以在開發在背景工作節點上執行的模組時,您不應該使用 autoreload (例如 UDF)。

在 Databricks Runtime 16.0 和更新版本中, autoreload Databricks 中的延伸模組會新增下列功能:

  • 支援針對模組進行目標重載,以修改函式內部。 只要盡可能重載模組的變更部分,可確保每個物件只有一個外部可見的實例,這更安全且更可靠。
  • 當您從工作區檔案匯入 Python 模組時,如果模組自上次匯入後已變更,Databricks 會自動建議使用 autoreload

若要深入瞭解延伸 autoreload 模組,請參閱 IPython 自動載入檔

重構程式碼

程式代碼開發的最佳做法是將程式代碼模組化,以便輕鬆地重複使用。 您可以使用 工作區檔案建立自定義 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)

接著,您可以使用 命令,讓定義於 power.py 中的函式可供不同的筆記本使用 %run

# 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