Importer des modules Python depuis des dossiers Git ou des fichiers du Workspace
Vous pouvez stocker du code Python dans les dossiers Git Databricks ou dans les fichiers de workspace, puis importer ce code Python dans votre pipeline. Pour plus d'informations sur l'utilisation des modules dans les dossiers Git ou les fichiers de workspace, consultez Utiliser les modules Python et R.
Pour importer un fichier Python, vous avez plusieurs options :
- Incluez le module Python dans votre pipeline, en tant que fichier d'infrastructures publiques. Cela fonctionne mieux si le module est spécifique au pipeline.
- Ajoutez un module partagé à votre environnement de pipeline, dans tout pipeline qui doit l'utiliser.
- Importez un module dans votre Workspace directement dans votre source Python, avec une instruction
import.
Inclure un module Python dans un pipeline
Vous pouvez créer un module Python dans le cadre de votre pipeline. Votre dossier racine de pipeline est automatiquement ajouté au sys.path. Cela vous permet de référencer le module directement dans le code source Python de votre pipeline.
L'exemple suivant montre comment créer un module Python dans le dossier racine de votre pipeline, et comment le référencer à partir d'un fichier source Python dans la source de votre pipeline :
-
Ouvrez votre pipeline dans l’ éditeur de pipeline.
-
Dans le navigateur d'assets de pipeline, à gauche, cliquez sur
Ajouter , puis choisissez Infrastructure publique dans le menu.
-
Saisissez
my_utils.pypour le **Nom**. -
Laissez le chemin default, puis cliquez sur Créer .
Cela crée le fichier
my_utils.pydans le dossierutilitiesde votre pipeline et crée le dossierutilities, s'il n'existe pas. Les fichiers de ce dossier ne sont pas ajoutés par default à la source de votre pipeline, mais peuvent être appelés à partir des fichiers.pyqui font partie de votre code source.By default, le fichier utilitaire contient une fonction d’exemple appelée
distance_km()qui prend une distance en miles et la convertit. -
Dans un fichier source Python dans votre dossier de transformations (vous pouvez en créer un en choisissant
Ajouter , puis en sélectionnant Transformation dans le menu), ajoutez le code suivant :
Pythonfrom utilities import my_utils
Vous pouvez maintenant appeler les fonctions dans my_utils à partir de ce fichier Python. Vous devez ajouter l'instruction import de tout fichier Python qui doit appeler des fonctions dans le module.
Ajouter un module Python à l’environnement de votre pipeline
Si vous souhaitez partager un module Python sur plusieurs pipelines, vous pouvez enregistrer le module n'importe où dans les fichiers de votre Workspace et le référencer depuis l'environnement de tout pipeline qui doit l'utiliser. Vous pouvez référencer des modules Python qui sont :
- Fichiers Python (
.py) individuels. - Projet Python empaqueté sous forme de Python wheel (fichier
.whl). - Projet Python non packagé avec un fichier
pyproject.toml(pour définir le nom et la version du projet).
L'exemple suivant montre comment ajouter une dépendance à un pipeline.
-
Ouvrez votre pipeline dans l’ éditeur de pipeline.
-
Cliquez sur
Paramètres dans la barre supérieure.
-
Dans le panneau Paramètres du pipeline , sous Environnement du pipeline , cliquez sur
Modifier l'environnement .
-
Ajouter une dépendance. Par exemple, pour ajouter un fichier dans votre Workspace, vous pourriez ajouter
/Volumes/libraries/path/to/python_files/file.py. Pour un Python wheel stocké dans des dossiers Git, votre chemin peut ressembler à/Workspace/libraries/path/to/wheel_files/file.whl.Vous pouvez ajouter un fichier sans chemin, ou un chemin relatif, s'il se trouve dans le dossier racine du pipeline.
Vous pouvez également ajouter un chemin à un dossier partagé à l’aide des dépendances pour permettre aux instructions import de votre code de trouver les modules que vous souhaitez importer. Par exemple, -e /Workspace/Users/<user_name>/path/to/add/.
Importez un module Python à l'aide de l'instruction import.
Vous pouvez également référencer directement un fichier Workspace dans votre code source Python.
-
Si le fichier se trouve dans le dossier
utilitiesde votre pipeline, vous pouvez le référencer sans chemin :Pythonfrom utilities import my_module -
Si le fichier se trouve ailleurs, vous pouvez l'importer en ajoutant d'abord le chemin du module à
sys.path:Pythonimport sys, os
sys.path.append(os.path.abspath('<module-path>'))
from my_module import * -
Vous pouvez également ajouter au
sys.pathpour tous les fichiers sources du pipeline en ajoutant le chemin d'accès à l'environnement du pipeline, comme décrit dans la section précédente.
Exemple d'importation de queries en tant que modules Python
L'exemple suivant montre comment importer des requêtes de dataset en tant que modules Python à partir de fichiers Workspace. Bien que cet exemple décrive l'utilisation de fichiers de workspace pour stocker le code source du pipeline, vous pouvez l'utiliser avec du code source stocké dans un dossier Git.
Pour exécuter cet exemple, utilisez les étapes suivantes :
-
Cliquez sur
Workspace dans la barre latérale de votre workspace Databricks pour ouvrir le navigateur de workspace.
-
Utilisez le navigateur du Workspace pour sélectionner un répertoire pour les modules Python.
-
Cliquez sur
dans la colonne la plus à droite du répertoire sélectionné et cliquez sur Créer > Fichier .
-
Saisissez un nom pour le fichier, par exemple,
clickstream_raw_module.py. L'éditeur de fichiers s'ouvre. Pour créer un module permettant de lire les données sources dans une table, saisissez ce qui suit dans la fenêtre de l'éditeur :Pythonfrom pyspark import pipelines as dp
json_path = "/databricks-datasets/wikipedia-datasets/data-001/clickstream/raw-uncompressed-json/2015_2_clickstream.json"
def create_clickstream_raw_table(spark):
@dp.table
def clickstream_raw():
return (
spark.read.json(json_path)
) -
Pour créer un module qui crée une nouvelle table contenant des données préparées, créez un nouveau fichier dans le même répertoire, saisissez un nom pour le fichier, par exemple,
clickstream_prepared_module.py, et saisissez ce qui suit dans la nouvelle fenêtre de l'éditeur :Pythonfrom clickstream_raw_module import *
from pyspark import pipelines as dp
from pyspark.sql.functions import *
from pyspark.sql.types import *
def create_clickstream_prepared_table(spark):
create_clickstream_raw_table(spark)
@dp.table
@dp.expect("valid_current_page_title", "current_page_title IS NOT NULL")
@dp.expect_or_fail("valid_count", "click_count > 0")
def clickstream_prepared():
return (
spark.read("clickstream_raw")
.withColumn("click_count", expr("CAST(n AS INT)"))
.withColumnRenamed("curr_title", "current_page_title")
.withColumnRenamed("prev_title", "previous_page_title")
.select("current_page_title", "click_count", "previous_page_title")
) -
Ensuite, créez un fichier Python dans votre source de pipeline. Depuis l'éditeur de pipeline, choisissez
Ajouter , puis transformation.
-
Nommez votre fichier et confirmez que **Python** est la langue par default.
-
Cliquez sur Créer .
-
Entrez le code d'exemple suivant dans le notebook.
Si votre notebook importe des modules ou des packages à partir d'un chemin de fichiers de workspace ou d'un chemin de dossiers Git différent du répertoire du notebook, vous devez ajouter manuellement le chemin d'accès aux fichiers à l'aide de sys.path.append().
Si vous importez un fichier depuis un dossier Git, vous devez préfixer le chemin avec /Workspace/. Par exemple, sys.path.append('/Workspace/...'). L'omission de /Workspace/ du chemin entraîne une erreur.
Si les modules ou packages sont stockés dans le même répertoire que le notebook, vous n'avez pas besoin d'ajouter le chemin manuellement. Vous n'avez pas non plus besoin d'ajouter manuellement le chemin lors de l'importation depuis le répertoire racine d'un dossier Git, car le répertoire racine est automatiquement ajouté au chemin.
import sys, os
sys.path.append(os.path.abspath('<module-path>'))
from pyspark import pipelines as dp
from clickstream_prepared_module import *
from pyspark.sql.functions import *
from pyspark.sql.types import *
create_clickstream_prepared_table(spark)
@dp.table(
comment="A table containing the top pages linking to the Apache Spark page."
)
def top_spark_referrers():
return (
spark.read.table("catalog_name.schema_name.clickstream_prepared")
.filter(expr("current_page_title == 'Apache_Spark'"))
.withColumnRenamed("previous_page_title", "referrer")
.sort(desc("click_count"))
.select("referrer", "click_count")
.limit(10)
)
Remplacez <module-path> par le chemin d'accès au répertoire contenant les modules Python à importer.
10. Pour exécuter le pipeline, cliquez sur Exécuter le pipeline .