Python- és R-modulok használata
Ez a cikk azt ismerteti, hogyan importálhat relatív elérési utakat a munkaterületfájlokban tárolt egyéni Python- és R-modulok a Databricks-jegyzetfüzetek mellett. A munkaterület-fájlok megkönnyítik a fejlesztési életciklusok szűkösségét, lehetővé téve a kód modularizálását, a %run parancsok importálási utasításokká alakítását, valamint a Python-kerekes fájlok újrabontását közös verziójú modulokká. A kód teszteléséhez használhatja a beépített Databricks webes terminált is.
Feljegyzés
A Databricks Runtime 14.0-s vagy újabb verziójában a helyileg végrehajtott kód alapértelmezett aktuális munkakönyvtára (CWD) a futtatandó jegyzetfüzetet vagy szkriptet tartalmazó könyvtár. Ez a Databricks Runtime 13.3 LTS és az alábbi viselkedésbeli változás. Lásd : Mi az alapértelmezett aktuális munkakönyvtár?.
Python- és R-modulok importálása
Fontos
A Databricks Runtime 13.3 LTS-ben és újabb verziókban a Pythonhoz sys.path
hozzáadott könyvtárakat , vagy a Python-csomagokként strukturált könyvtárakat a rendszer automatikusan elosztja a fürt összes végrehajtója között. A Databricks Runtime 12.2 LTS-ben és az alábbi verziókban a sys.path
hozzá hozzáadott kódtárakat kifejezetten telepíteni kell a végrehajtókra.
A Databricks Runtime 11.3 LTS és újabb verzióiban a jegyzetfüzet aktuális munkakönyvtára automatikusan bekerül a Python-elérési útra. Ha Git-mappákat használ, a rendszer hozzáadja a gyökértár könyvtárát.
Ha egy másik könyvtárból szeretne modulokat importálni, hozzá kell adnia a modult tartalmazó könyvtárat a könyvtárhoz sys.path
. A könyvtárakat relatív elérési út használatával adhatja meg, ahogyan az alábbi példában is látható:
import sys
import os
sys.path.append(os.path.abspath('..'))
A függvényeket ugyanúgy importálja a munkaterületfájlokban tárolt modulból, mint egy fürttárként vagy jegyzetfüzet-hatókörű tárként mentett modulból:
Python
from sample import power
power.powerOfTwo(3)
R
source("sample.R")
power.powerOfTwo(3)
Fontos
Ha egy utasítást import
használ, és több azonos nevű kódtár létezik, a Databricks elsőbbséget élvező szabályokkal határozza meg, hogy melyik tárat kell betöltenie. Lásd a Python-kódtárak elsőbbségét.
Python-modulok automatikus betöltése
Ha több fájlt szerkeszt a Python-kód fejlesztése során, engedélyezheti, hogy a bővítmény automatikusan újra betöltse az autoreload
importált modulokat, hogy a parancs futtassa ezeket a módosításokat. A bővítmény engedélyezéséhez használja a következő parancsokat bármelyik jegyzetfüzetcellában vagy Python-fájlban autoreload
:
%load_ext autoreload
%autoreload 2
A autoreload
bővítmény csak a Spark-illesztőprogram folyamatában működik, és nem tölt be kódot a Spark-végrehajtó folyamatokba. Mivel csak a Spark-illesztőprogram-csomóponton működik, és a Spark-végrehajtót futtató csomópontokon nem, nem ajánlott feldolgozó csomópontokon futó modulok (például UDF-ek) fejlesztésekor használni autoreload
.
A Databricks Runtime 16.0-s és újabb verziókban a Databricks bővítménye autoreload
a következő funkciókat adja hozzá:
- Modulok célzott újratöltésének támogatása a függvények belső módosításához. Amikor csak lehetséges, a modul módosított részének újratöltése biztosítja, hogy minden objektumnak csak egy külsőleg látható példánya legyen, ami biztonságosabb és megbízhatóbb.
- Amikor egy Python-modult egy munkaterületfájlból importál, a Databricks automatikusan javasolja a használatát
autoreload
, ha a modul az utolsó importálás óta megváltozott.
A bővítményről további információt az autoreload
IPython automatikus betöltési dokumentációjában talál.
Kód újrabontása
A kódfejlesztés ajánlott eljárása a kód modularizálása, hogy könnyen újra felhasználható legyen. Létrehozhat egyéni Python-fájlokat munkaterületfájlokkal, és az utasítással elérhetővé teheti az ezekben a fájlokban lévő kódot egy import
jegyzetfüzet számára.
Jegyzetfüzet-kód újrabontása újrafelhasználható fájlokba:
- Hozzon létre egy új forráskódfájlt a kódhoz.
- Adjon hozzá Python-importálási utasításokat a jegyzetfüzethez, hogy az új fájlban lévő kódot elérhetővé tegye a jegyzetfüzet számára.
Migrálás parancsokból %run
Ha %run
parancsokkal teszi elérhetővé egy jegyzetfüzetben definiált Python- vagy R-függvényeket egy másik jegyzetfüzet számára, vagy egyéni .whl
fájlokat telepít egy fürtre, fontolja meg az egyéni modulok munkaterületfájlokként való hozzáadását. Így szinkronizálhatja a jegyzetfüzeteket és más kódmodulokat, biztosítva, hogy a jegyzetfüzet mindig a megfelelő verziót használja.
%run
parancsokkal felvehet egy jegyzetfüzetet egy másikba, és gyakran használják a támogató Python- vagy R-kódokat a jegyzetfüzetek számára. Ebben a példában egy elnevezett power.py
jegyzetfüzet tartalmazza az alábbi kódot.
# 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)
Ezután egy parancs használatával %run
elérhetővé teheti a függvényeket power.py
egy másik jegyzetfüzet számára:
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
Munkaterületfájlok használatával közvetlenül importálhatja a Python-kódot tartalmazó modult, és futtathatja a függvényt.
from power import n_to_mth
n_to_mth(3, 4)
Python-fájlok .whl
újrabontása relatív kódtárakba
Egyéni .whl
fájlokat telepíthet egy fürtre, majd importálhatja őket a fürthöz csatolt jegyzetfüzetbe. Ez a folyamat azonban nehézkes és hibalehetőséget jelenthet a gyakran frissített kód esetében. A munkaterületfájlok lehetővé teszik, hogy ezeket a Python-fájlokat ugyanabban a könyvtárban tartsa, mint a kódot használó jegyzetfüzetek, biztosítva, hogy a jegyzetfüzet mindig a megfelelő verziót használja.
A Python-projektek csomagolásáról ebben az oktatóanyagban talál további információt.
Az Azure Databricks webes termináljának használata teszteléshez
Az Azure Databricks webes terminállal anélkül tesztelheti a Python- vagy R-kód módosításait, hogy jegyzetfüzetet használna a fájl importálásához és futtatásához.
- Nyissa meg a webes terminált.
- Váltás a könyvtárra:
cd /Workspace/Users/<path-to-directory>/
. - Futtassa a Python- vagy R-fájlt:
python file_name.py
vagyRscript file_name.r
.