2 votes

La commande magique en ligne de %matplotlib ne parvient pas à lire les variables des cellules précédentes dans le bloc-notes Jupyterhub de AWS-EMR.

J'essaie de tracer un jeu de données spark en utilisant matplotlib après l'avoir converti en dataframe pandas dans AWS EMR jupyterhub.

Je suis capable de tracer dans une seule cellule en utilisant matplotlib comme ci-dessous :

%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

df = [1, 1.6, 3, 4.2, 5, 4, 2.5, 3, 1.5]
plt.plot(df)

Maintenant, le code ci-dessus fonctionne très bien pour moi.

Après cet exemple, je suis allé de l'avant pour tracer mon dataframe pandas à partir d'une cellule nouvelle/multiple dans AWS-EMR Jupyterhub comme ceci :

-Cell 1-
sparkDS=spark.read.parquet('s3://bucket_name/path').cache()

-Cell 2-
from pyspark.sql.functions import *
sparkDS_groupBy=sparkDS.groupBy('col1').agg(count('*').alias('count')).orderBy('col1')
pandasDF=sparkDS_groupBy.toPandas()

-cell 3-
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

plt.plot(pandasDF)

Mon code échoue juste dans la cellule 3 avec l'erreur suivante :

NameError : le nom 'pandasDF' n'est pas défini.

Quelqu'un a-t-il une idée de ce qui ne va pas ?

Pourquoi la nouvelle cellule de mon notebook jupyterhub n'est pas capable de reconnaître une variable de la cellule précédente ?

Cela a-t-il un rapport avec la commande magique '%matplotlib inline' (j'ai également essayé avec '%matplotlib notebook', mais sans succès) ?

ps : J'utilise la configuration AWS 5.19 EMR-Jupyterhub notebook pour mon travail de traçage.

Cette erreur est un peu similaire à celle-ci, mais n'est pas un doublon. Comment faire fonctionner matplotlib dans le carnet Jupyter de AWS EMR ?

0voto

yegeniy Points 836

Vous voudrez bien vous pencher sur le %%spark -o df_name y %%local en tapant %%help dans une cellule.

Plus précisément, dans votre cas, essayez :

  1. Utilisez %%spark -o sparkDS_groupBy au début de -Cell 2- ,
  2. Début -Cell 3- con %%local ,
  3. Et l'intrigue sparkDS_groupBy en -Cell 3- au lieu de pandasDF .

Pour ceux qui ont moins de contexte, vous pouvez obtenir des parcelles en implémentant ce qui suit dans un Notebook EMR utilisant le noyau PySpark, attaché à un cluster EMR qui est au moins de la version 5.26.0 (qui introduit Bibliothèques à l'échelle de l'ordinateur portable .

(chaque bloc de code représente une cellule)

%% help

%%configure -f
{ "conf":{
"spark.pyspark.python": "python3",
"spark.pyspark.virtualenv.enabled": "true",
"spark.pyspark.virtualenv.type":"native",
"spark.pyspark.virtualenv.bin.path":"/usr/bin/virtualenv"
}}

sc.install_pypi_package("matplotlib")

%%spark -o my_df
# in this cell, my_df is a pyspark.sql.DataFrame
my_df = sc.read.text("s3://.../...")

%%local
%matplotlib inline

import matplotlib.pyplot as plt
# in this cell, my_df is a pandas.DataFrame
plt.plot(my_df)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X