Delen via


Werken met Python- en R-modules

In dit artikel wordt beschreven hoe u relatieve paden kunt gebruiken om aangepaste Python- en R-modules te importeren die zijn opgeslagen in werkruimtebestanden naast uw Databricks-notebooks. Werkruimtebestanden kunnen een strakkere ontwikkelingslevenscyclus vergemakkelijken, zodat u uw code kunt modulariseren, %run-opdrachten kunt converteren naar importinstructies en Python-wielbestanden kunt herstructureren naar co-versies van modules. U kunt ook de ingebouwde Databricks-webterminal gebruiken om uw code te testen.

Notitie

In Databricks Runtime 14.0 en hoger is de standaard huidige werkmap (CWD) voor lokaal uitgevoerde code de map met het notebook of script dat wordt uitgevoerd. Dit is een wijziging in gedrag van Databricks Runtime 13.3 LTS en hieronder. Zie Wat is de standaard huidige werkmap?

Python- en R-modules importeren

Belangrijk

In Databricks Runtime 13.3 LTS en hoger worden mappen die zijn toegevoegd aan python sys.pathof mappen die zijn gestructureerd als Python-pakketten, automatisch gedistribueerd naar alle uitvoerders in het cluster. In Databricks Runtime 12.2 LTS en hieronder moeten bibliotheken die aan de sys.path bibliotheek zijn toegevoegd, expliciet worden geïnstalleerd op uitvoerders.

In Databricks Runtime 11.3 LTS en hoger wordt de huidige werkmap van uw notebook automatisch toegevoegd aan het Python-pad. Als u Git-mappen gebruikt, wordt de map met de hoofdopslagplaats toegevoegd.

Als u modules uit een andere map wilt importeren, moet u de map met de module toevoegen aan sys.path. U kunt mappen opgeven met behulp van een relatief pad, zoals in het volgende voorbeeld:

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

U importeert functies uit een module die is opgeslagen in werkruimtebestanden, net zoals u dat zou doen vanuit een module die is opgeslagen als een clusterbibliotheek of notebook-scoped bibliotheek:

Python

from sample import power
power.powerOfTwo(3)

R

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

Belangrijk

Wanneer u een import instructie gebruikt en meerdere bibliotheken met dezelfde naam bestaan, gebruikt Databricks prioriteitsregels om te bepalen welke bibliotheek moet worden geladen. Bekijk de prioriteit van de Python-bibliotheek.

Autoreload voor Python-modules

Als u meerdere bestanden bewerkt tijdens het ontwikkelen van Python-code, kunt u de autoreload extensie inschakelen om geïmporteerde modules automatisch opnieuw te laden, zodat de opdracht deze bewerkingen kan ophalen. Gebruik de volgende opdrachten in een notebookcel of Python-bestand om de autoreload extensie in te schakelen:

%load_ext autoreload
%autoreload 2

De autoreload extensie werkt alleen in het Spark-stuurprogrammaproces en laadt geen code opnieuw in Spark-uitvoerprocessen. Omdat het alleen werkt op het Spark-stuurprogrammaknooppunt en niet op knooppunten waarop de Spark-uitvoerder wordt uitgevoerd, moet u niet gebruiken autoreload bij het ontwikkelen van modules die worden uitgevoerd op werkknooppunten (bijvoorbeeld UDF's).

In Databricks Runtime 16.0 en hoger voegt de autoreload extensie in Databricks de volgende functies toe:

  • Ondersteuning voor gerichte herlaading van modules voor wijzigingen intern aan functies. Als u alleen het gewijzigde gedeelte van een module opnieuw laadt, zorgt u ervoor dat er slechts één extern zichtbaar exemplaar van elk object is, wat veiliger en betrouwbaarder is.
  • Wanneer u een Python-module importeert uit een werkruimtebestand, wordt in Databricks automatisch voorgesteld autoreload of de module is gewijzigd sinds de laatste import.

Zie de IPython AutoReload-documentatie voor meer informatie over de autoreload extensie.

Code herstructureren

Een best practice voor codeontwikkeling is het modulariseren van code, zodat deze eenvoudig opnieuw kan worden gebruikt. U kunt aangepaste Python-bestanden maken met werkruimtebestanden en de code in die bestanden beschikbaar maken voor een notebook met behulp van de import instructie.

Notitieblokcode herstructureren in herbruikbare bestanden:

  1. Maak een nieuw broncodebestand voor uw code.
  2. Voeg Python-importinstructies toe aan het notebook om de code in het nieuwe bestand beschikbaar te maken voor het notebook.

Migreren vanuit %run opdrachten

Als u opdrachten gebruikt %run om Python- of R-functies die zijn gedefinieerd in een notebook beschikbaar te maken voor een ander notebook of om aangepaste .whl bestanden op een cluster te installeren, kunt u overwegen om deze aangepaste modules als werkruimtebestanden op te nemen. Op deze manier kunt u uw notitieblokken en andere codemodules gesynchroniseerd houden, zodat uw notebook altijd de juiste versie gebruikt.

%run met opdrachten kunt u één notebook in een ander notitieblok opnemen en worden vaak gebruikt om ondersteunende Python- of R-code beschikbaar te maken voor een notebook. In dit voorbeeld bevat een notitieblok met de naam power.py de onderstaande code.

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

Vervolgens kunt u functies die zijn gedefinieerd in power.py een ander notitieblok beschikbaar maken met een %run opdracht:

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

Met werkruimtebestanden kunt u de module met de Python-code rechtstreeks importeren en de functie uitvoeren.

from power import n_to_mth
n_to_mth(3, 4)

Python-bestanden .whl herstructureren naar relatieve bibliotheken

U kunt aangepaste .whl bestanden op een cluster installeren en deze vervolgens importeren in een notebook dat aan dat cluster is gekoppeld. Dit proces kan echter omslachtig en foutgevoelig zijn voor regelmatig bijgewerkte code. Met werkruimtebestanden kunt u deze Python-bestanden in dezelfde map bewaren als de notebooks die gebruikmaken van de code, zodat uw notebook altijd de juiste versie gebruikt.

Zie deze zelfstudie voor meer informatie over het verpakken van Python-projecten.

Azure Databricks-webterminal gebruiken voor testen

U kunt de Azure Databricks-webterminal gebruiken om wijzigingen in uw Python- of R-code te testen zonder een notebook te gebruiken om het bestand te importeren en uit te voeren.

  1. Open de webterminal.
  2. Ga naar de map: cd /Workspace/Users/<path-to-directory>/.
  3. Voer het Python- of R-bestand uit: python file_name.py of Rscript file_name.r.