Arbeta med Python- och R-moduler

Den här artikeln beskriver hur du kan använda relativa sökvägar för att importera anpassade Python- och R-moduler som lagras i arbetsytefiler tillsammans med dina Databricks-notebook-filer. Arbetsytefiler kan underlätta strängare utvecklingslivscykler, så att du kan modularisera koden, konvertera %run-kommandon till importinstruktioner och omstrukturera Python-hjulfiler till samversionsmoduler. Du kan också använda den inbyggda Databricks-webbterminalen för att testa koden.

Kommentar

I Databricks Runtime 14.0 och senare är den aktuella standardkatalogen (CWD) för kod som körs lokalt katalogen som innehåller anteckningsboken eller skriptet som körs. Det här är en ändring i beteendet från Databricks Runtime 13.3 LTS och nedan. Se Vad är standardkatalogen för aktuell arbetskatalog?.

Importera Python- och R-moduler

Viktigt!

I Databricks Runtime 13.3 LTS och senare distribueras kataloger som läggs till i Python sys.path, eller kataloger som är strukturerade som Python-paket, automatiskt till alla köre i klustret. I Databricks Runtime 12.2 LTS och nedan måste bibliotek som sys.path läggs till i vara uttryckligen installerade på exekutorer.

I Databricks Runtime 11.3 LTS och senare läggs den aktuella arbetskatalogen för anteckningsboken automatiskt till i Python-sökvägen. Om du använder Git-mappar läggs rotdatabaskatalogen till.

Om du vill importera moduler från en annan katalog måste du lägga till katalogen som innehåller modulen i sys.path. Du kan ange kataloger med hjälp av en relativ sökväg, som i följande exempel:

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

Du importerar funktioner från en modul som lagras i arbetsytefiler precis som från en modul som sparats som ett klusterbibliotek eller bibliotek med notebook-omfång:

Python

from sample import power
power.powerOfTwo(3)

R

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

Viktigt!

När du använder en import instruktion och det finns flera bibliotek med samma namn använder Databricks prioritetsregler för att avgöra vilket bibliotek som ska läsas in. Se Prioritet för Python-bibliotek.

Läs in automatiskt för Python-moduler

Om du redigerar flera filer när du utvecklar Python-kod kan du aktivera autoreload tillägget för att läsa in alla importerade moduler automatiskt så att kommandokörningarna hämtar dessa redigeringar. Använd följande kommandon i valfri notebook-cell eller Python-fil för att aktivera autoreload tillägget:

%load_ext autoreload
%autoreload 2

Tillägget autoreload fungerar bara i Spark-drivrutinsprocessen och läser inte in kod i Spark-körprocesser igen. Eftersom den bara fungerar på Spark-drivrutinsnoden och inte noder som kör Spark-kören bör du inte använda autoreload när du utvecklar moduler som körs på arbetsnoder (till exempel UDF:er).

I Databricks Runtime 16.0 och senare autoreload lägger tillägget i Databricks till följande funktioner:

  • Stöd för riktad omläsning av moduler för ändringar som är interna för funktioner. Om du läser in den ändrade delen av en modul igen när det är möjligt ser du till att det bara finns en externt synlig instans av varje objekt, vilket är säkrare och mer tillförlitligt.
  • När du importerar en Python-modul från en arbetsytefil föreslår Databricks automatiskt att du använder autoreload om modulen har ändrats sedan den senaste importen.

Mer information om tillägget finns i autoreload dokumentationen om automatisk inläsning av IPython.

Refaktorkod

Bästa praxis för kodutveckling är att modularisera kod så att den enkelt kan återanvändas. Du kan skapa anpassade Python-filer med arbetsytefiler och göra koden i dessa filer tillgänglig för en notebook-fil med hjälp av -instruktionen import .

Så här omstrukturerar du notebook-kod till återanvändbara filer:

  1. Skapa en ny källkodsfil för koden.
  2. Lägg till Python-importinstruktioner i notebook-filen för att göra koden i den nya filen tillgänglig för notebook-filen.

Migrera från %run kommandon

Om du använder %run kommandon för att göra Python- eller R-funktioner som definierats i en notebook-fil tillgängliga för en annan notebook-fil, eller installerar anpassade .whl filer i ett kluster, bör du överväga att inkludera de anpassade modulerna som arbetsytefiler. På så sätt kan du hålla dina notebook-filer och andra kodmoduler synkroniserade så att notebook-filen alltid använder rätt version.

%run med kommandon kan du inkludera en notebook-fil i en annan och används ofta för att göra stöd för Python- eller R-kod tillgänglig för en notebook-fil. I det här exemplet innehåller en notebook-fil med namnet power.py koden nedan.

# 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)

Du kan sedan göra funktioner som definierats i power.py tillgängliga för en annan notebook-fil med ett %run kommando:

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

Med hjälp av arbetsytefiler kan du importera modulen som innehåller Python-koden direkt och köra funktionen.

from power import n_to_mth
n_to_mth(3, 4)

Omstrukturera Python-filer .whl till relativa bibliotek

Du kan installera anpassade .whl filer på ett kluster och sedan importera dem till en notebook-fil som är kopplad till klustret. Den här processen kan dock vara besvärlig och felbenägen för ofta uppdaterad kod. Med arbetsytefiler kan du behålla dessa Python-filer i samma katalog som de notebook-filer som använder koden, vilket säkerställer att notebook-filen alltid använder rätt version.

Mer information om hur du paketerar Python-projekt finns i den här självstudien.

Använda Azure Databricks-webbterminalen för testning

Du kan använda Azure Databricks-webbterminalen för att testa ändringar i Python- eller R-koden utan att använda en notebook-fil för att importera och köra filen.

  1. Öppna webbterminalen.
  2. Ändra till katalogen: cd /Workspace/Users/<path-to-directory>/.
  3. Kör Python- eller R-filen: python file_name.py eller Rscript file_name.r.