Passer au contenu

Comment résoudre l'erreur « ModuleNotFoundError » sur un notebook SageMaker qui exécute le noyau Sparkmagic ?

Lecture de 4 minute(s)
0

Je souhaite utiliser le noyau Sparkmagic (PySpark) pour exécuter une instance de notebook Amazon SageMaker. J'ai utilisé pip pour installer les bibliothèques Python, mais j'ai reçu le message d’erreur suivant : « ModuleNotFoundError: No module named my_module_name. » (ModuleNotFoundError : Aucun module nommé mon_nom_de_modèle)

Brève description

Lorsque vous utilisez le noyau Sparkmagic, le notebook SageMaker fait office d'interface pour la session Apache Spark. La session Apache Spark s'exécute sur un cluster Amazon EMR distant ou sur un point de terminaison de développement AWS Glue. Lorsque vous utilisez pip pour installer la bibliothèque Python sur l'instance de notebook, la bibliothèque n'est disponible que pour l'instance de notebook locale. Pour résoudre ModuleNotFoundError, installez la bibliothèque sur le point de terminaison de développement AWS Glue ou sur chaque nœud du cluster EMR.

Remarque : Si le code qui utilise la bibliothèque n'est pas gourmand en calculs, utilisez le mode local (%%local). Le mode local exécute la cellule uniquement sur l'instance de notebook locale. Lorsque vous utilisez le mode local, il n'est pas nécessaire d'installer la bibliothèque sur le cluster distant ou le point de terminaison de développement.

Résolution

Installer une bibliothèque sur un point de terminaison de développement AWS Glue

Pour installer des bibliothèques sur un point de terminaison de développement AWS Glue, consultez la section Charger des bibliothèques Python sur un point de terminaison de développement.

Installer une bibliothèque sur un cluster Amazon EMR

Remarque : Dans les commandes suivantes, remplacez Example-library par la bibliothèque que vous souhaitez utiliser.

Pour installer des bibliothèques sur un cluster Amazon EMR distant, utilisez une action bootstrap lors de la création du cluster. Si vous avez connecté un cluster Amazon EMR à l'instance de notebook SageMaker, installez manuellement la bibliothèque sur tous les nœuds du cluster.

Procédez comme suit :

  1. Utilisez SSH pour vous connecter au nœud primaire.

  2. Installez la bibliothèque :

    sudo python -m pip install pandas
  3. Vérifiez que le module est correctement installé :

    python -c "import Example-library as pd; print(pd.__version__)"
  4. Ouvrez l'instance de notebook Amazon SageMaker, puis redémarrez le noyau.

  5. Pour vérifier que la bibliothèque fonctionne, exécutez une commande qui nécessite la bibliothèque, telle que la suivante :

    pdf = spark.sql("show databases").toExample-library()
  6. Utilisez SSH pour vous connecter aux autres nœuds du cluster, puis installez la bibliothèque sur chaque nœud.

Utiliser le mode local

Si vous n'avez pas besoin d'exécuter le code sur le cluster distant ou le point de terminaison de développement, utilisez l'instance de notebook locale. Par exemple, n'installez pas matplotlib sur chaque nœud du cluster Spark. Utilisez plutôt le mode local (%%local) pour exécuter la cellule sur l'instance de notebook locale.

Remarque : Dans les commandes suivantes, remplacez les exemples de variable par vos propres valeurs.

Pour exporter les résultats vers une variable locale et exécuter le code en mode local, procédez comme suit :

  1. Exportez le résultat vers une variable locale :

    %%sql -o query1SELECT 1, 2, 3
  2. Exécutez le code localement :

    %%localprint(len(query1))

Pour utiliser SageMakerEstimator dans un pipeline Spark, exécutez une session Spark locale pour modifier les données. Utilisez ensuite la bibliothèque SageMaker Spark pour vous entraîner et effectuer des prévisions. Pour plus d'informations, consultez la page sagemaker-spark sur le référentiel GitHub d'AWS Labs.

Pour consulter un exemple de bloc-notes, consultez le fichier pyspark_mnist_kmeans sur le référentiel GitHub d'AWS Labs. L'exemple de bloc-notes utilise le noyau conda_python3 qui n'est pas soutenu par un cluster EMR. Pour les tâches impliquant des charges de travail importantes, créez un cluster Spark distant et connectez le cluster à l'instance de notebook.

Informations connexes

Utiliser Apache Spark avec Amazon SageMaker

Créer des notebooks Amazon SageMaker soutenus par Spark dans Amazon EMR