Je lance un programme pyspark:
$ export SPARK_HOME=
$ export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.Zip
$ python
Et le code py:
from pyspark import SparkContext, SparkConf
SparkConf().setAppName("Example").setMaster("local[2]")
sc = SparkContext(conf=conf)
Comment ajouter des dépendances de jar telles que le fichier jar Databricks csv? En utilisant la ligne de commande, je peux ajouter le paquet comme ceci:
$ pyspark/spark-submit --packages com.databricks:spark-csv_2.10:1.3.0
Mais je ne les utilise pas. Le programme fait partie d'un flux de travail plus vaste qui n'utilise pas spark-submit je devrais être en mesure d'exécuter mon programme ./foo.py et il devrait fonctionner.
Il y a beaucoup d'approches ici (régler ENV vars, ajouter à $ SPARK_HOME/conf/spark-defaults.conf, etc.), certaines des réponses les couvrent déjà. Je voulais ajouter un supplémentaire réponse pour ceux qui utilisent spécifiquement les cahiers Jupyter et créent la session Spark à partir du cahier. Voici la solution qui a le mieux fonctionné pour moi (dans mon cas, je voulais que le paquet Kafka soit chargé):
spark = SparkSession.builder.appName('my_awesome')\
.config('spark.jars.packages', 'org.Apache.spark:spark-sql-kafka-0-10_2.11:2.2.0')\
.getOrCreate()
En utilisant cette ligne de code, je n'ai rien d'autre à faire (pas de modification du fichier ENVs ou du fichier de configuration).
Toutes les dépendances peuvent être passées en utilisant spark.jars.packages
(paramétrer spark.jars
devrait également fonctionner) dans la propriété $SPARK_HOME/conf/spark-defaults.conf
. Ce devrait être une liste de coordonnées séparées par des virgules.
Et les packages ou les propriétés de classpath doivent être définis avant le démarrage de la machine virtuelle Java et ceci se produit lors de l'initialisation SparkConf
. Cela signifie que la méthode SparkConf.set
ne peut pas être utilisée ici.
L'approche alternative consiste à définir la variable d'environnement PYSPARK_SUBMIT_ARGS
avant que l'objet SparkConf
soit initialisé:
import os
from pyspark import SparkConf
SUBMIT_ARGS = "--packages com.databricks:spark-csv_2.11:1.2.0 pyspark-Shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
conf = SparkConf()
sc = SparkContext(conf=conf)
Enfin trouvé la réponse après plusieurs tentatives. La réponse est spécifique à l’utilisation du fichier spark-csv. Créez un dossier sur votre disque dur en indiquant D:\Spark\spark_jars. Placez les pots suivants:
2 et 3 étant des dépendances requises par spark-csv, ces deux fichiers doivent également être téléchargés. Allez dans votre répertoire de config où vous avez téléchargé Spark. Dans le fichier spark-defaults.conf, ajoutez la ligne:
spark.driver.extraClassPath D:/Spark/spark_jars/*
L'astérisque doit inclure tous les pots. Maintenant, lancez Python, créez SparkContext, SQLContext comme vous le feriez normalement. Vous devriez maintenant pouvoir utiliser spark-csv comme
sqlContext.read.format('com.databricks.spark.csv').\
options(header='true', inferschema='true').\
load('foobar.csv')
J'ai rencontré un problème similaire avec un jar
différent ("Connecteur MongoDB pour Spark", mongo-spark-connector
), mais le gros problème était que j'ai installé Spark
via pyspark
dans conda
(conda install pyspark
). Par conséquent, toute l’aide fournie pour les réponses à Spark
-spécifiques n’était pas vraiment utile. Pour ceux d'entre vous qui installent avec conda
, voici le processus que j'ai bricolé:
1) Trouvez où se trouve votre pyspark/jars
. Les miens étaient dans cette voie: ~/anaconda2/pkgs/pyspark-2.3.0-py27_0/lib/python2.7/site-packages/pyspark/jars
.
2) Téléchargez le fichier jar
dans le chemin indiqué à l’étape 1, à partir de cet emplacement .
3) Vous devriez maintenant pouvoir exécuter quelque chose comme ceci (code tiré de tutoriel officiel de MongoDB , en utilisant la réponse de Briford Wylie ci-dessus ):
from pyspark.sql import SparkSession
my_spark = SparkSession \
.builder \
.appName("myApp") \
.config("spark.mongodb.input.uri", "mongodb://127.0.0.1:27017/spark.test_pyspark_mbd_conn") \
.config("spark.mongodb.output.uri", "mongodb://127.0.0.1:27017/spark.test_pyspark_mbd_conn") \
.config('spark.jars.packages', 'org.mongodb.spark:mongo-spark-connector_2.11:2.2.2') \
.getOrCreate()
Avertissements:
1) Je ne sais pas si cette réponse est le bon endroit/SO question pour mettre ceci; s'il vous plaît aviser d'un meilleur endroit et je vais le déplacer.
2) Si vous pensez que je me suis trompé ou que le processus ci-dessus a été amélioré, merci de le commenter et je le réviserai.
import os
import sys
spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, spark_home + "/python")
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.10.4-src.Zip'))
Ça vient....
sys.path.insert(0, <PATH TO YOUR JAR>)
Ensuite...
import pyspark
import numpy as np
from pyspark import SparkContext
sc = SparkContext("local[1]")
.
.
.