Ich verwende Spark 1.4.0-rc2, damit ich Python 3 mit Spark verwenden kann. Wenn ich export PYSPARK_PYTHON=python3
meiner .bashrc-Datei hinzufüge , kann ich spark interaktiv mit Python 3 ausführen. Wenn ich jedoch ein eigenständiges Programm im lokalen Modus ausführen möchte, wird folgende Fehlermeldung angezeigt:
Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions
Wie kann ich die Python-Version für den Treiber angeben? Die Einstellung export PYSPARK_DRIVER_PYTHON=python3
hat nicht funktioniert.
quelle
.bashrc
.Das Einstellen
PYSPARK_PYTHON=python3
undPYSPARK_DRIVER_PYTHON=python3
beides auf python3 funktioniert bei mir. Ich habe dies mit Export in meiner .bashrc gemacht. Am Ende sind dies die Variablen, die ich erstelle: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"
Ich habe auch dieses Tutorial befolgt, damit es in Ipython3 funktioniert: http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
quelle
PYSPARK_PYTHON=python3
legt die Python-Version der Worker fest, oder?PYSPARK_PYTHON=python3; PYSPARK_DRIVER_PYTHON=ipython3
zu Ausführen> Konfigurationen bearbeiten> {your_run_config}> Umgebungsvariablen hinzu. Um diese als Standard für alle Ausführungskonfigurationen festzulegen, aktualisieren Sie die Umgebungsvariablen für die gewünschten Vorlagen unter Ausführen> Konfigurationen bearbeiten> VorlagenHat in meinem Fall geholfen:
import os os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/" os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
quelle
Sie können die Version von Python für den Treiber angeben, indem Sie die entsprechenden Umgebungsvariablen in der
./conf/spark-env.sh
Datei festlegen . Wenn es noch nicht vorhanden ist, können Sie diespark-env.sh.template
bereitgestellte Datei verwenden, die auch viele andere Variablen enthält.Hier ist ein einfaches Beispiel für eine
spark-env.sh
Datei zum Festlegen der relevanten Python-Umgebungsvariablen:#!/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
In diesem Fall wird die von den Workern / Executoren verwendete Python-Version auf Python3 und die Treiberversion von Python auf iPython gesetzt, damit eine schönere Shell funktioniert.
Wenn Sie noch keine
spark-env.sh
Datei haben und keine anderen Variablen festlegen müssen, sollte diese das tun, was Sie wollen, vorausgesetzt, die Pfade zu den relevanten Python-Binärdateien sind korrekt (überprüfen Sie mitwhich
). Ich hatte ein ähnliches Problem und das hat es behoben.quelle
Wenn Sie Spark in einer größeren Organisation ausführen und die Datei /spark-env.sh nicht aktualisieren können, funktioniert das Exportieren der Umgebungsvariablen möglicherweise nicht.
Sie können die spezifischen Spark-Einstellungen über die
--conf
Option hinzufügen, wenn Sie den Job zur Laufzeit senden.pyspark --master yarn --[other settings]\ --conf "spark.pyspark.python=/your/python/loc/bin/python"\ --conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
quelle
Ich hatte gerade das gleiche Problem und dies sind die Schritte, die ich befolge, um die Python-Version bereitzustellen. Ich wollte meine PySpark-Jobs mit Python 2.7 anstelle von 2.6 ausführen.
Gehen Sie zu dem Ordner, auf den verwiesen
$SPARK_HOME
wird (in meinem Fall/home/cloudera/spark-2.1.0-bin-hadoop2.7/
)Unter Ordner
conf
befindet sich eine Datei mit dem Namenspark-env.sh
. Wenn Sie eine Datei mit dem Namen haben, müssenspark-env.sh.template
Sie die Datei in eine neue Datei mit dem Namen kopierenspark-env.sh
.Bearbeiten Sie die Datei und schreiben Sie die nächsten drei Zeilen
Speichern Sie es und starten Sie Ihre Anwendung erneut :)
Auf diese Weise können Sie beim Herunterladen einer neuen eigenständigen Spark-Version die Python-Version festlegen, auf der PySpark ausgeführt werden soll.
quelle
cp
die Dateispark-env.sh.template
als neue Datei zu verwendenspark-env.sh
und dann die neue Datei zu ändern, anstatt den Namen und den Inhalt der Vorlage zu ändern. Die Vorlage soll als Referenz bleiben.Ich bin auf dieselbe Fehlermeldung gestoßen und habe drei oben erwähnte Möglichkeiten ausprobiert. Ich habe die Ergebnisse als ergänzende Referenz zu anderen aufgeführt.
PYTHON_SPARK
undPYTHON_DRIVER_SPARK
Wert inspark-env.sh
funktioniert bei mir nicht.os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
funktioniert bei mir nicht.~/.bashrc
funktioniert wie ein Zauber ~quelle
Ich habe es in IPython ausgeführt (wie in diesem Link von Jacek Wasilewski beschrieben ) und diese Ausnahme erhalten. Hinzugefügt
PYSPARK_PYTHON
zum IPython Kernel - Datei und gebrauchten jupyter Notebook laufen und zu arbeiten begann.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" }
quelle
Ich habe das gleiche Problem mit Standalone-Funken in Fenstern . Meine Version von fix sieht folgendermaßen aus: Ich hatte meine Umgebungsvariablen wie folgt eingestellt
PYSPARK_SUBMIT_ARGS="pyspark-shell" PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
Mit dieser Einstellung habe ich eine Aktion auf pyspark ausgeführt und die folgende Ausnahme erhalten:
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.
Um zu überprüfen, mit welcher Python-Version mein Spark-Worker verwendet, klicken Sie in der cmd- Eingabeaufforderung auf Folgendes .
python --version Python 3.6.3
das zeigte mir Python 3.6.3 . Mein Spark-Worker verwendet also eindeutig Systempython v3.6.3.
Jetzt, da ich meinen Spark-Treiber
PYSPARK_DRIVER_PYTHON=jupyter
so eingestellt habe, dass er Jupiter durch Ausführen ausführt , muss ich überprüfen, welche Python-Version Jupiter verwendet.Öffnen Sie dazu die Anaconda-Eingabeaufforderung und klicken Sie auf
python --version Python 3.5.X :: Anaconda, Inc.
Hier hat der Jupyter Python die v3.5.x verwendet . Sie können diese Version auch in jedem Notebook überprüfen (Hilfe-> Info).
Jetzt muss ich die Jupiter-Python auf die Version v3.6.6 aktualisieren . Öffnen Sie dazu die Anaconda-Eingabeaufforderung und drücken Sie
Dadurch erhalten Sie eine Liste der verfügbaren Python-Versionen in Anaconda. Installieren Sie Ihre gewünschte mit
Jetzt habe ich beide Python-Installationen der gleichen Version 3.6.3 Spark sollte nicht konform sein und es nicht, als ich eine Aktion auf Spark-Treiber ausgeführt habe. Ausnahme ist weg. Viel Spaß beim Codieren ...
quelle
Wenn Sie nur die Python-Version für die aktuelle Aufgabe ändern möchten, können Sie den folgenden Befehl pyspark start verwenden:
quelle
Bitte schauen Sie sich den folgenden Ausschnitt an:
#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
quelle
Ich benutze die folgende Umgebung
? python --version; ipython --version; jupyter --version Python 3.5.2+ 5.3.0 5.0.0
und die folgenden Aliase funktionieren gut für mich
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"
Im Notizbuch habe ich die Umgebung wie folgt eingerichtet
from pyspark.context import SparkContext sc = SparkContext.getOrCreate()
quelle
Error
Fix (für Cloudera-Umgebung)
Bearbeiten Sie diese Datei:
/opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
Fügen Sie diese Zeilen hinzu:
quelle
Bin heute bei der Arbeit darauf gestoßen. Ein Administrator hielt es für ratsam, Python 2.7 als
PYSPARK_PYTHON
undPYSPARK_DRIVER_PYTHON
in fest zu codieren$SPARK_HOME/conf/spark-env.sh
. Unnötig zu erwähnen, dass dadurch alle unsere Jobs unterbrochen wurden, die andere Python-Versionen oder -Umgebungen verwenden (das sind> 90% unserer Jobs). @PhillipStich weist richtig darauf hin, dass Sie möglicherweise nicht immer über Schreibberechtigungen für diese Datei verfügen, wie dies in unserem Fall der Fall ist. Während das Festlegen der Konfiguration imspark-submit
Aufruf eine Option ist, besteht eine andere Alternative (im Garn- / Cluster-Modus) darin, dieSPARK_CONF_DIR
Umgebungsvariable so einzustellen , dass sie auf ein anderes Konfigurationsskript verweist. Dort können Sie Ihren PYSPARK_PYTHON und alle anderen Optionen festlegen, die Sie möglicherweise benötigen. Eine Vorlage finden Sie im Quellcode von spark-env.sh auf github .quelle
In meinem Fall (Ubuntu 18.04) habe ich diesen Code im Terminal ausgeführt:
und dann
SPARK_HOME
wie folgt bearbeitet :export SPARK_HOME=/home/muser/programs/anaconda2019/lib/python3.7/site-packages/pyspark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
Auf diese Weise
SPARK_HOME
verweise ich auf daspyspark
Paket, das ich im installiert habesite-package
.Um zu erfahren, wie man es benutzt
vim
, gehen Sie zu diesem Link.quelle
Lauf:
Die erste Zeile in diesem Beispiel zeigt den Python3-Symlink. Führen Sie Folgendes aus, um es als Standard-Python-Symlink festzulegen:
Laden Sie dann Ihre Shell neu.
quelle
Ich hatte das gleiche Problem und habe nur vergessen, meine virtuelle Umgebung zu aktivieren. Für alle da draußen, die auch eine mentale Lücke hatten.
quelle
Wenn Sie auf einem Mac arbeiten, verwenden Sie die folgenden Befehle
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
Wenn Sie ein anderes Betriebssystem verwenden, überprüfen Sie den folgenden Link: https://github.com/GalvanizeDataScience/spark-install
quelle