web-dev-qa-db-fra.com

Comment charger IPython Shell avec PySpark

Je souhaite charger IPython Shell (pas le cahier IPython) dans lequel je peux utiliser PySpark via la ligne de commande. Est-ce possible? J'ai installé Spark-1.4.1.

22
pg2455

Si vous utilisez Spark <1.2, vous pouvez simplement exécuter bin/pyspark avec une variable d'environnement IPYTHON=1.

IPYTHON=1 /path/to/bin/pyspark

ou 

export IPYTHON=1
/path/to/bin/pyspark

PYSPARK_DRIVER_PYTHON continue de fonctionner avec la méthode recommandée par Spark 1.2 et supérieur pour définir l'environnement Python pour ces versions

PYSPARK_DRIVER_PYTHON=ipython /path/to/bin/pyspark

ou 

export PYSPARK_DRIVER_PYTHON=ipython
/path/to/bin/pyspark

Vous pouvez remplacer ipython par un chemin d'accès à l'interprète de votre choix.

34
zero323

J'utilise ptpython (1), qui fournit non seulement les fonctionnalités ipython ainsi que votre choix de raccourcis clavier vi (1) ou emacs (1); il fournit également un sens/intelligence dynamique de code contextuel, ce qui est extrêmement utile pour les travaux Ad-Hoc SPARK sur la CLI.

Voici à quoi ressemble ma session vi - activée ptpython, en notant le mode VI (INSERT) au bas de la capture d'écran, ainsi que le style ipython Invite à indiquer que ces fonctionnalités ptpython ont été sélectionnées (pour en savoir plus sur la façon de les sélectionner dans un instant):

 enter image description here

Pour obtenir tout cela, suivez les étapes simples suivantes:

user@linux$ pip3 install ptpython # Everything here assumes Python3

user@linux$ vi ${SPARK_HOME}/conf/spark-env.sh
    # Comment-out/disable the following two lines. This is necessary because
    # they take precedence over any UNIX environment settings for them:
       # PYSPARK_PYTHON=/path/to/python
       # PYSPARK_DRIVER_PYTHON=/path/to/python

user@linux$ vi ${HOME}/.profile # Or whatever your login RC-file is.
    # Add these two lines:
       export PYSPARK_PYTHON=python3           # Fully-Qualify this if necessary. (python3)
       export PYSPARK_DRIVER_PYTHON=ptpython3  # Fully-Qualify this if necessary. (ptpython3)

user@linux$ . ${HOME}/.profile  # Source the RC file.

user@linux$ pyspark
    # You are now running pyspark(1) within ptpython; a code pop-up/interactive
    # Shell; with your choice of vi(1) or emacs(1) key-bindings; and 
    # your choice of ipython functionality or not.

Pour sélectionner vos préférences pypython (et plusieurs d'entre elles), appuyez simplement sur F2 dans une session ptpython et sélectionnez les options de votre choix.

CLOSING NOTE: Si vous soumettez une application Python Spark (par opposition à une interaction avec pyspark (1) via l'interface de ligne de commande, comme indiqué ci-dessus), définissez simplement PYSPARK_PYTHON et PYSPARK_DRIVER_PYTHON par programmation, en Python. , ainsi:

os.environ['PYSPARK_PYTHON'] = 'python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = 'python3' # Not 'ptpython3' in this case.

J'espère que cette réponse et cette configuration sont utiles.

5
NYCeyes

Selon le Github officiel, IPYTHON = 1 n'est pas disponible dans Spark 2.0 + Utilisez plutôt PYSPARK_PYTHON et PYSPARK_DRIVER_PYTHON.

https://github.com/Apache/spark/blob/master/bin/pyspark

2
Yang Bryan

si la version de spark> = 2.0 et la configuration suivante pourraient être ajoutés à .bashrc

export PYSPARK_PYTHON=/data/venv/your_env/bin/python
export PYSPARK_DRIVER_PYTHON=/data/venv/your_env/bin/ipython
2
shengshan zhang

Voici ce qui a fonctionné pour moi:

# if you run your ipython with 2.7 version with ipython2
# whatever you use for launching ipython Shell should come after '=' sign
export PYSPARK_DRIVER_PYTHON=ipython2

puis à partir du répertoire SPARK_HOME:

./bin/pyspark
2
pg2455

Ce que j’ai trouvé utile, c’est d’écrire des scripts bash qui chargent Spark d’une manière spécifique. Cela vous donnera un moyen facile de démarrer Spark dans différents environnements (par exemple, ipython et un bloc-notes Jupyter). 

Pour ce faire, ouvrez un script vierge (en utilisant l’éditeur de texte de votre choix), par exemple celui appelé ipython_spark.sh.

Pour cet exemple, je vais fournir le script que j'utilise pour ouvrir spark avec l'interpréteur ipython:

#!/bin/bash
export PYSPARK_DRIVER_PYTHON=ipython

${SPARK_HOME}/bin/pyspark \
--master local[4] \
--executor-memory 1G \
--driver-memory 1G \
--conf spark.sql.warehouse.dir="file:///tmp/spark-warehouse" \
--packages com.databricks:spark-csv_2.11:1.5.0 \
--packages com.amazonaws:aws-Java-sdk-pom:1.10.34 \
--packages org.Apache.hadoop:hadoop-aws:2.7.3

Notez que SPARK_HOME est défini dans mon bash_profile, mais vous pouvez simplement insérer le chemin d'accès complet à l'emplacement où pyspark se trouve sur votre ordinateur.

J'aime mettre tous les scripts comme celui-ci à un seul endroit, alors je mets ce fichier dans un dossier appelé "scripts" 

Maintenant, pour cet exemple, vous devez accéder à votre profil bash et entrer les lignes suivantes:

export PATH=$PATH:/Users/<username>/scripts
alias ispark="bash /Users/<username>/scripts/ipython_spark.sh"

Ces chemins seront spécifiques à l'endroit où vous avez mis ipython_spark.sh Ensuite, vous devrez peut-être mettre à jour les autorisations:

$ chmod 711 ipython_spark.sh

et source votre bash_profile:

$ source ~/.bash_profile

Je suis sur un Mac, mais cela devrait également fonctionner pour Linux, même si vous allez probablement mettre à jour .bashrc au lieu de bash_profile. 

Ce que j'aime dans cette méthode, c'est que vous pouvez écrire plusieurs scripts, avec différentes configurations et ouvrir l'étincelle en conséquence. Selon que vous configurez un cluster, devez charger différents packages ou modifiez le nombre de cœurs mis à disposition par spark, etc., vous pouvez mettre à jour ce script ou en créer de nouveaux. Comme noté par @ zero323 ci-dessus, PYSPARK_DRIVER_PYTHON = est la syntaxe correcte pour Spark> 1.2 J'utilise Spark 2.2.

1
Jomonsugi

Aucune des réponses mentionnées n'a fonctionné pour moi. J'ai toujours eu l'erreur:

.../pyspark/bin/load-spark-env.sh: No such file or directory

Ce que j'ai fait a été de lancer ipython et de créer une session Spark manuellement:

from pyspark.sql import SparkSession
spark = SparkSession\
    .builder\
    .appName("example-spark")\
    .config("spark.sql.crossJoin.enabled","true")\
    .getOrCreate()

Pour éviter cela à chaque fois, j'ai déplacé le code vers ~/.ispark.py et créé l'alias suivant (ajoutez ceci à ~/.bashrc):

alias ipyspark="ipython -i ~/.ispark.py"

Après cela, vous pouvez lancer PySpark avec iPython en tapant:

ipyspark
1
stasdeep