J'utilise spark 1.4.0-rc2 pour pouvoir utiliser python 3 avec spark. Si j'ajoute export PYSPARK_PYTHON=python3
à mon fichier .bashrc, je peux exécuter spark de manière interactive avec python 3. Cependant, si je veux exécuter un programme autonome en mode local, j'obtiens une erreur:
Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions
Comment puis-je spécifier la version de python pour le pilote? Le réglage export PYSPARK_DRIVER_PYTHON=python3
n'a pas fonctionné.
la source
.bashrc
.La configuration
PYSPARK_PYTHON=python3
et lesPYSPARK_DRIVER_PYTHON=python3
deux vers python3 fonctionnent pour moi. Je l'ai fait en utilisant l'exportation dans mon .bashrc. Au final, ce sont les variables que je crée:export SPARK_HOME="$HOME/Downloads/spark-1.4.0-bin-hadoop2.4" export IPYTHON=1 export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=ipython3 export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
J'ai également suivi ce tutoriel pour le faire fonctionner à partir du notebook Ipython3: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
la source
PYSPARK_PYTHON=python3
définit la version Python des workers, non?PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3
à Exécuter> Modifier les configurations> {your_run_config}> Variables d'environnement. Pour en faire la valeur par défaut pour toutes les configurations d'exécution, mettez à jour les variables d'environnement pour le (s) modèle (s) souhaité (s) sous Exécuter> Modifier les configurations> ModèlesAidé dans mon cas:
import os os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/" os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
la source
Vous pouvez spécifier la version de Python pour le pilote en définissant les variables d'environnement appropriées dans le
./conf/spark-env.sh
fichier. S'il n'existe pas déjà, vous pouvez utiliser lespark-env.sh.template
fichier fourni qui comprend également de nombreuses autres variables.Voici un exemple simple de
spark-env.sh
fichier pour définir les variables d'environnement Python pertinentes:#!/usr/bin/env bash # This file is sourced when running various Spark programs. export PYSPARK_PYTHON=/usr/bin/python3 export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython
Dans ce cas, il définit la version de Python utilisée par les travailleurs / exécuteurs sur Python3 et la version du pilote de Python sur iPython pour un shell plus agréable à utiliser.
Si vous n'avez pas encore de
spark-env.sh
fichier et que vous n'avez pas besoin de définir d'autres variables, celui-ci devrait faire ce que vous voulez, en supposant que les chemins vers les binaires python pertinents sont corrects (vérifiez avecwhich
). J'ai eu un problème similaire et cela l'a résolu.la source
Si vous exécutez Spark dans une organisation plus grande et que vous ne parvenez pas à mettre à jour le fichier /spark-env.sh, l'exportation des variables d'environnement peut ne pas fonctionner.
Vous pouvez ajouter les paramètres Spark spécifiques via l'
--conf
option lors de la soumission du travail au moment de l'exécution.pyspark --master yarn --[other settings]\ --conf "spark.pyspark.python=/your/python/loc/bin/python"\ --conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
la source
Je viens de faire face au même problème et ce sont les étapes que je suis pour fournir la version Python. Je voulais exécuter mes travaux PySpark avec Python 2.7 au lieu de 2.6.
Allez dans le dossier où
$SPARK_HOME
pointe (dans mon cas est/home/cloudera/spark-2.1.0-bin-hadoop2.7/
)Sous le dossier
conf
, il y a un fichier appeléspark-env.sh
. Si vous avez un fichier appelé,spark-env.sh.template
vous devrez copier le fichier dans un nouveau fichier appeléspark-env.sh
.Modifiez le fichier et écrivez les trois lignes suivantes
Enregistrez-le et relancez votre application :)
De cette façon, si vous téléchargez une nouvelle version autonome de Spark, vous pouvez définir la version Python sur laquelle vous souhaitez exécuter PySpark.
la source
cp
placer le fichierspark-env.sh.template
comme nouveauspark-env.sh
, puis de modifier le nouveau fichier plutôt que de changer le nom et le contenu du modèle. Le modèle est censé rester une référence.Je suis tombé sur le même message d'erreur et j'ai essayé trois méthodes mentionnées ci-dessus. J'ai énuméré les résultats comme une référence complémentaire aux autres.
PYTHON_SPARK
etPYTHON_DRIVER_SPARK
dansspark-env.sh
ne fonctionne pas pour moi.os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
ne fonctionne pas pour moi.~/.bashrc
œuvres comme un charme ~la source
Je l'exécutais en IPython (comme décrit dans ce lien par Jacek Wasilewski ) et recevais cette exception; Ajouté
PYSPARK_PYTHON
au fichier du noyau IPython et utilisé le notebook jupyter pour s'exécuter, et a commencé à travailler.vi ~/.ipython/kernels/pyspark/kernel.json { "display_name": "pySpark (Spark 1.4.0)", "language": "python", "argv": [ "/usr/bin/python2", "-m", "IPython.kernel", "--profile=pyspark", "-f", "{connection_file}" ], "env": { "SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/", "PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1 .6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip", "PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py ", "PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell", "PYSPARK_DRIVER_PYTHON":"ipython2", "PYSPARK_PYTHON": "python2" }
la source
J'ai eu le même problème sur l' étincelle autonome dans Windows . Ma version de correctif est comme ceci: j'avais mes variables d'environnement définies comme ci-dessous
PYSPARK_SUBMIT_ARGS="pyspark-shell" PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
Avec ce paramètre, j'ai exécuté une action sur pyspark et j'ai obtenu l'exception suivante:
Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions. Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
Pour vérifier avec quelle version de Python mon Spark-worker utilise, cliquez sur ce qui suit dans l' invite cmd .
python --version Python 3.6.3
qui m'a montré Python 3.6.3 . Si clairement mon étinceleur utilise le système python qui est la v3.6.3.
Maintenant que je configure mon pilote spark pour exécuter jupyter en définissant
PYSPARK_DRIVER_PYTHON=jupyter
, je dois donc vérifier la version de python que jupyter utilise.Pour ce faire, ouvrez l' invite Anaconda et appuyez sur
python --version Python 3.5.X :: Anaconda, Inc.
Voici le jupyter python utilise le v3.5.x . Vous pouvez vérifier cette version également dans n'importe quel notebook (Aide-> À propos).
Maintenant, je dois mettre à jour le jupyter python vers la version v3.6.6 . Pour ce faire, ouvrez l' invite Anaconda et appuyez sur
Cela vous donnera une liste des versions de python disponibles dans Anaconda. Installez celui que vous souhaitez avec
Maintenant, j'ai à la fois l'installation de Python de la même version 3.6.3 Spark ne devrait pas être conforme et ce n'était pas le cas lorsque j'ai exécuté une action sur le pilote Spark. L'exception est partie. Bon codage ...
la source
Si vous souhaitez uniquement modifier la version de python pour la tâche en cours, vous pouvez utiliser la commande pyspark start suivante:
la source
Veuillez consulter l'extrait ci-dessous:
#setting environment variable for pyspark in linux||ubuntu #goto --- /usr/local/spark/conf #create a new file named spark-env.sh copy all content of spark-env.sh.template to it #then add below lines to it, with path to python PYSPARK_PYTHON="/usr/bin/python3" PYSPARK_DRIVER_PYTHON="/usr/bin/python3" PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser" #i was running python 3.6 ||run - 'which python' in terminal to find the path of python
la source
J'utilise l'environnement suivant
? python --version; ipython --version; jupyter --version Python 3.5.2+ 5.3.0 5.0.0
et les alias suivants fonctionnent bien pour moi
alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11" alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
Dans le cahier, je configure l'environnement comme suit
from pyspark.context import SparkContext sc = SparkContext.getOrCreate()
la source
Erreur
Correction (pour l'environnement Cloudera)
Modifiez ce fichier:
/opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
Ajoutez ces lignes:
la source
Ran dans ce aujourd'hui au travail. Un administrateur a jugé prudent de coder en dur Python 2.7 en tant que
PYSPARK_PYTHON
etPYSPARK_DRIVER_PYTHON
dans$SPARK_HOME/conf/spark-env.sh
. Inutile de dire que cela a cassé tous nos emplois qui utilisent d'autres versions ou environnements de Python (ce qui représente> 90% de nos emplois). @PhillipStich souligne à juste titre que vous ne disposez pas toujours des autorisations d'écriture pour ce fichier, comme c'est notre cas. Bien que la définition de la configuration dans l'spark-submit
appel soit une option, une autre alternative (lors de l'exécution en mode fil / cluster) consiste à définir laSPARK_CONF_DIR
variable d'environnement pour qu'elle pointe vers un autre script de configuration. Là, vous pouvez définir votre PYSPARK_PYTHON et toutes les autres options dont vous pourriez avoir besoin. Un modèle peut être trouvé dans le code source de spark-env.sh sur github .la source
Dans mon cas (Ubuntu 18.04), j'ai exécuté ce code dans le terminal:
puis édité
SPARK_HOME
comme suit:export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
Ce faisant, je
SPARK_HOME
ferai référence aupyspark
package que j'ai installé dans lesite-package
.Pour savoir comment l'utiliser
vim
, accédez à ce lien.la source
Courir:
La première ligne de cet exemple montre le lien symbolique python3. Pour le définir comme lien symbolique python par défaut, exécutez ce qui suit:
puis rechargez votre shell.
la source
J'ai eu le même problème, j'ai juste oublié d'activer mon environnement virtuel. Pour tous ceux qui avaient aussi un vide mental.
la source
Si vous travaillez sous mac, utilisez les commandes suivantes
export SPARK_HOME=`brew info apache-spark | grep /usr | tail -n 1 | cut -f 1 -d " "`/libexec export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH export HADOOP_HOME=`brew info hadoop | grep /usr | head -n 1 | cut -f 1 -d " "`/libexec export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH export PYSPARK_PYTHON=python3
Si vous utilisez un autre système d'exploitation, consultez le lien suivant: https://github.com/GalvanizeDataScience/spark-install
la source