Udostępnij za pośrednictwem


Praca z modułami python i R

W tym artykule opisano sposób używania ścieżek względnych do importowania niestandardowych modułów języka Python i R przechowywanych w plikach obszarów roboczych wraz z notesami usługi Databricks. Pliki obszarów roboczych mogą ułatwić ściślejsze cykle programowania, co pozwala na modularyzowanie kodu, konwertowanie poleceń %run na instrukcje importowania i refaktoryzowanie plików wheel języka Python do modułów współskładnikowych. Możesz również użyć wbudowanego terminalu internetowego usługi Databricks do przetestowania kodu.

Uwaga

W środowisku Databricks Runtime 14.0 lub nowszym domyślnym bieżącym katalogiem roboczym (CWD) wykonywanym lokalnie jest katalog zawierający notes lub skrypt. Jest to zmiana zachowania środowiska Databricks Runtime 13.3 LTS i poniżej. Zobacz Co to jest domyślny bieżący katalog roboczy?.

Importowanie modułów języka Python i języka R

Ważne

W środowisku Databricks Runtime 13.3 LTS lub nowszym katalogi dodane do języka Python sys.pathlub katalogi, które mają strukturę jako pakiety języka Python, są automatycznie dystrybuowane do wszystkich funkcji wykonawczych w klastrze. W środowisku Databricks Runtime 12.2 LTS i poniżej biblioteki dodane do sys.path elementu muszą być jawnie zainstalowane na funkcjach wykonawczych.

W środowisku Databricks Runtime 11.3 LTS i nowszym bieżący katalog roboczy notesu jest automatycznie dodawany do ścieżki języka Python. Jeśli używasz folderów Git, zostanie dodany katalog repozytorium głównego.

Aby zaimportować moduły z innego katalogu, należy dodać katalog zawierający moduł do folderu sys.path. Katalogi można określić przy użyciu ścieżki względnej, jak w poniższym przykładzie:

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

Funkcje są importowane z modułu przechowywanego w plikach obszaru roboczego tak samo jak z modułu zapisanego jako biblioteka klastra lub biblioteka o zakresie notesu:

Python

from sample import power
power.powerOfTwo(3)

R

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

Ważne

Jeśli używasz import instrukcji i wielu bibliotek o tej samej nazwie istnieje, usługa Databricks używa reguł pierwszeństwa w celu określenia, która biblioteka ma być ładowana. Zobacz Pierwszeństwo biblioteki języka Python.

Autoreload dla modułów języka Python

Jeśli edytujesz wiele plików podczas tworzenia kodu w języku Python, możesz włączyć autoreload rozszerzenie, aby automatycznie ładować wszystkie zaimportowane moduły, aby polecenie uruchamiało te zmiany. Użyj następujących poleceń w dowolnej komórce notesu lub pliku języka Python, aby włączyć autoreload rozszerzenie:

%load_ext autoreload
%autoreload 2

autoreload Rozszerzenie działa tylko w procesie sterownika Spark i nie ładuje ponownie kodu do procesów funkcji wykonawczej platformy Spark. Ponieważ działa tylko w węźle sterownika spark, a nie węzłach z funkcją wykonawcza platformy Spark, nie należy używać autoreload podczas tworzenia modułów uruchamianych w węzłach roboczych (na przykład funkcji zdefiniowanych przez użytkownika).

W środowisku Databricks Runtime 16.0 lub nowszym autoreload rozszerzenie w usłudze Databricks dodaje następujące funkcje:

  • Obsługa docelowego ponownego ładowania modułów w celu modyfikacji wewnętrznych funkcji. Ponowne ładowanie tylko zmienionej części modułu zawsze, gdy jest to możliwe, gwarantuje, że istnieje tylko jedno zewnętrznie widoczne wystąpienie każdego obiektu, co jest bezpieczniejsze i bardziej niezawodne.
  • Podczas importowania modułu języka Python z pliku obszaru roboczego usługa Databricks automatycznie sugeruje użycie autoreload , jeśli moduł uległ zmianie od czasu ostatniego importu.

Aby dowiedzieć się więcej na temat rozszerzenia, zobacz dokumentację autoreload IPython autoreload.

Refaktoryzacja kodu

Najlepszym rozwiązaniem w zakresie programowania kodu jest modułyzacja kodu, dzięki czemu można go łatwo użyć ponownie. Możesz utworzyć niestandardowe pliki języka Python z plikami obszaru roboczego i udostępnić kod w tych plikach notesowi przy użyciu instrukcji import .

Aby refaktoryzować kod notesu do plików wielokrotnego użytku:

  1. Utwórz nowy plik kodu źródłowego dla kodu.
  2. Dodaj instrukcje importowania języka Python do notesu, aby udostępnić kod w nowym pliku notesowi.

Migrowanie z %run poleceń

Jeśli używasz %run poleceń do tworzenia funkcji języka Python lub R zdefiniowanych w notesie dostępnym dla innego notesu lub instalujesz pliki niestandardowe w klastrze, rozważ dołączenie tych modułów niestandardowych .whl jako plików obszaru roboczego. Dzięki temu możesz zachować synchronizację notesów i innych modułów kodu, zapewniając, że notes zawsze używa poprawnej wersji.

%run Polecenia umożliwiają dołączenie jednego notesu do innego i są często używane do udostępniania pomocniczego kodu w języku Python lub R notesowi. W tym przykładzie notes o nazwie power.py zawiera poniższy kod.

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

Następnie można udostępnić funkcje w power.py innym notesie %run za pomocą polecenia :

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

Za pomocą plików obszaru roboczego możesz bezpośrednio zaimportować moduł zawierający kod języka Python i uruchomić funkcję.

from power import n_to_mth
n_to_mth(3, 4)

Refaktoryzacja plików języka Python .whl do bibliotek względnych

Pliki niestandardowe .whl można zainstalować w klastrze, a następnie zaimportować je do notesu dołączonego do tego klastra. Jednak ten proces może być uciążliwy i podatny na błędy dla często aktualizowanego kodu. Pliki obszarów roboczych umożliwiają przechowywanie tych plików języka Python w tym samym katalogu co notesy korzystające z kodu, dzięki czemu notes zawsze używa poprawnej wersji.

Aby uzyskać więcej informacji na temat tworzenia pakietów projektów języka Python, zobacz ten samouczek.

Testowanie za pomocą terminalu internetowego usługi Azure Databricks

Za pomocą terminalu internetowego usługi Azure Databricks można przetestować modyfikacje kodu języka Python lub R bez użycia notesu do importowania i uruchamiania pliku.

  1. Otwórz terminal internetowy.
  2. Przejdź do katalogu: cd /Workspace/Users/<path-to-directory>/.
  3. Uruchom plik Python lub R: python file_name.py lub Rscript file_name.r.