Ceci est une copie de la question de quelqu'un d'autre sur un autre forum auquel on n'a jamais répondu, alors j'ai pensé la poser à nouveau ici, car j'ai le même problème. (Voir http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )
J'ai Spark installé correctement sur ma machine et je peux exécuter des programmes python avec les modules pyspark sans erreur lors de l'utilisation de ./bin/pyspark comme interprète python. .
Cependant, lorsque j'essaie d'exécuter le shell Python normal, lorsque j'essaie d'importer des modules pyspark, le message d'erreur suivant s'affiche:
from pyspark import SparkContext
et il dit
"No module named pyspark".
Comment puis-je réparer cela? Y a-t-il une variable d'environnement que je dois définir pour pointer Python vers les en-têtes/bibliothèques/etc de pyspark? Si mon spark installation est/spark /, quels chemins pyspark dois-je inclure? Ou les programmes pyspark peuvent-ils uniquement être exécutés à partir de l'interpréteur pyspark?
Il s'avère que la corbeille pyspark charge LOADING python et charge automatiquement les chemins de bibliothèque corrects. Découvrez $ SPARK_HOME/bin/pyspark:
# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
J'ai ajouté cette ligne à mon fichier .bashrc et les modules sont maintenant correctement trouvés!
Voici une méthode simple (Si vous ne vous souciez pas de la façon dont cela fonctionne !!!)
Utilisez findpark
Allez dans votre shell python
pip install findspark
import findspark
findspark.init()
importer les modules nécessaires
from pyspark import SparkContext
from pyspark import SparkConf
Terminé!!!
Si cela affiche une telle erreur:
ImportError: Aucun module nommé py4j.Java_gateway
Veuillez ajouter $ SPARK_HOME/python/build à PYTHONPATH:
export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
ne lancez pas votre fichier py en tant que: python filename.py
à la place, utilisez: spark-submit filename.py
En exportant le chemin SPARK et le chemin Py4j, cela a commencé à fonctionner:
export SPARK_HOME=/usr/local/Cellar/Apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.Zip:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
Donc, si vous ne voulez pas les taper à chaque fois que vous voulez lancer le shell Python, vous voudrez peut-être l'ajouter à votre fichier .bashrc
Sur Mac, j'utilise Homebrew pour installer Spark (formule "Apache-spark"). Ensuite, je règle PYTHONPATH de cette façon pour que l'importation Python fonctionne:
export SPARK_HOME=/usr/local/Cellar/Apache-spark/1.2.0
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
Remplacez le "1.2.0" par la version actuelle d’Apache-spark sur votre mac.
Pour une exécution Spark dans pyspark, deux composants doivent fonctionner ensemble:
pyspark
python packageLors du lancement de choses avec spark-submit ou pyspark, ces scripts s’occupent des deux, c’est-à-dire qu’ils configurent votre PYTHONPATH, votre PATH, etc., de manière à ce que votre script puisse trouver pyspark et démarre également l’instance spark. , configuration en fonction de vos paramètres, par exemple --master X
Alternativement, il est possible de contourner ces scripts et d'exécuter votre application spark directement dans l'interpréteur python commepython myscript.py
. Ceci est particulièrement intéressant lorsque spark les scripts commencent à devenir plus complexes et finissent par recevoir leurs propres arguments.
getOrCreate()
à partir de l'objet générateur.Votre script peut donc avoir quelque chose comme ça:
from pyspark.sql import SparkSession
if __== "__main__":
if spark_main_opts:
# Set main options, e.g. "--master local[4]"
os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-Shell"
# Set spark config
spark = (SparkSession.builder
.config("spark.checkpoint.compress", True)
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
.getOrCreate())
Pour vous débarrasser de ImportError: No module named py4j.Java_gateway
, vous devez ajouter les lignes suivantes:
import os
import sys
os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4"
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python")
sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.Zip")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("success")
except ImportError as e:
print ("error importing spark modules", e)
sys.exit(1)
Sous Windows 10, ce qui suit a fonctionné pour moi. J'ai ajouté les variables d'environnement suivantes à l'aide de Paramètres> Modifier les variables d'environnement de votre compte:
SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7
PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%
(remplacez "C:\Programming\..." par le dossier dans lequel vous avez installé spark)
Pour les utilisateurs de Linux, voici la manière correcte (et non codée en dur) d’inclure pyspark libaray dans PYTHONPATH. Les deux parties de PATH sont nécessaires:
Notez ci-dessous que la version de la bibliothèque compressée est déterminée dynamiquement, nous ne la codons donc pas en dur.
export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.Zip):${PYTHONPATH}
J'ai eu le même problème.
Assurez-vous également que vous utilisez la bonne version python et que vous l'installez avec la bonne version de pip. dans mon cas: j’avais python 2.7 et 3.x. J'ai installé pyspark avec
pip2.7 installer pyspark
et cela a fonctionné.
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
C’est ce que j’ai fait pour utiliser ma distribution Anaconda avec Spark. Ceci est Spark indépendant de la version. Vous pouvez modifier la première ligne en python bin de vos utilisateurs. En outre, à partir de Spark 2.2.0, PySpark est disponible sous forme de package autonome sur PyPi, mais je n’ai pas encore testé.
J'exécute un cluster spark sur la machine virtuelle CentOS, qui est installé à partir de packages cloudera yum.
J'ai dû définir les variables suivantes pour exécuter pyspark.
export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
Dans le cas de DSE (DataStax Cassandra & Spark), l'emplacement suivant doit être ajouté à PYTHONPATH.
export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH
Ensuite, utilisez le dse pyspark pour obtenir les modules dans le chemin.
dse pyspark
Vous pouvez obtenir le pyspark path
dans python en utilisant pip
(si vous avez installé pyspark en utilisant PIP) comme ci-dessous
pip show pyspark
Vous pouvez également créer un conteneur Docker avec Alpine comme système d'exploitation et l'installation Python et Pyspark comme des packages. Cela aura tout conteneurisé.
J'ai eu cette erreur parce que le script python que je tentais de soumettre s'appelait pyspark.py (facepalm). Le correctif était de définir mon PYTHONPATH comme recommandé ci-dessus, puis de renommer le script pyspark_test.py et de nettoyer le pyspark.pyc créé en fonction du nom d'origine de mon script et d'effacer cette erreur.
J'ai eu le même problème et ajouterais une chose aux solutions proposées ci-dessus. Lorsque vous utilisez Homebrew sous Mac OS X pour installer Spark, vous devez corriger l'adresse du chemin py4j afin d'inclure libexec dans le chemin (n'oubliez pas de changer la version de py4j pour celle que vous avez déjà);
PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
Dans mon cas, il s’agissait d’une installation différente python dist_package (python 3.5) alors que j’utilisais python 3.6;
python -m pip install pyspark