PySpark - SparkContext

SparkContext est le point d'entrée de toute fonctionnalité Spark. Lorsque nous exécutons une application Spark, un programme pilote démarre, qui a la fonction principale et votre SparkContext est lancé ici. Le programme pilote exécute ensuite les opérations à l'intérieur des exécuteurs sur les nœuds de calcul.

SparkContext utilise Py4J pour lancer un JVM et crée un JavaSparkContext. Par défaut, PySpark a SparkContext disponible en tant que‘sc’, donc la création d'un nouveau SparkContext ne fonctionnera pas.

Le bloc de code suivant contient les détails d'une classe PySpark et les paramètres qu'un SparkContext peut accepter.

class pyspark.SparkContext (
   master = None,
   appName = None, 
   sparkHome = None, 
   pyFiles = None, 
   environment = None, 
   batchSize = 0, 
   serializer = PickleSerializer(), 
   conf = None, 
   gateway = None, 
   jsc = None, 
   profiler_cls = <class 'pyspark.profiler.BasicProfiler'>
)

Paramètres

Voici les paramètres d'un SparkContext.

  • Master - C'est l'URL du cluster auquel il se connecte.

  • appName - Nom de votre travail.

  • sparkHome - Répertoire d'installation de Spark.

  • pyFiles - Les fichiers .zip ou .py à envoyer au cluster et à ajouter au PYTHONPATH.

  • Environment - Variables d'environnement des nœuds de travail.

  • batchSize- Le nombre d'objets Python représentés comme un seul objet Java. Définissez 1 pour désactiver le traitement par lots, 0 pour choisir automatiquement la taille du lot en fonction de la taille des objets ou -1 pour utiliser une taille de lot illimitée.

  • Serializer - Sérialiseur RDD.

  • Conf - Un objet de L {SparkConf} pour définir toutes les propriétés Spark.

  • Gateway - Utilisez une passerelle et une JVM existantes, sinon initialisez une nouvelle JVM.

  • JSC - L'instance JavaSparkContext.

  • profiler_cls - Une classe de Profiler personnalisé utilisée pour faire le profilage (la valeur par défaut est pyspark.profiler.BasicProfiler).

Parmi les paramètres ci-dessus, master et appnamesont principalement utilisés. Les deux premières lignes de tout programme PySpark se présentent comme indiqué ci-dessous -

from pyspark import SparkContext
sc = SparkContext("local", "First App")

Exemple SparkContext - PySpark Shell

Maintenant que vous en savez assez sur SparkContext, laissez-nous exécuter un exemple simple sur le shell PySpark. Dans cet exemple, nous compterons le nombre de lignes avec le caractère 'a' ou 'b' dans leREADME.mdfichier. Donc, disons que s'il y a 5 lignes dans un fichier et 3 lignes ont le caractère 'a', alors la sortie sera →Line with a: 3. Il en sera de même pour le caractère «b».

Note- Nous ne créons aucun objet SparkContext dans l'exemple suivant car, par défaut, Spark crée automatiquement l'objet SparkContext nommé sc, au démarrage du shell PySpark. Si vous essayez de créer un autre objet SparkContext, vous obtiendrez l'erreur suivante -"ValueError: Cannot run multiple SparkContexts at once".

<<< logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md"
<<< logData = sc.textFile(logFile).cache()
<<< numAs = logData.filter(lambda s: 'a' in s).count()
<<< numBs = logData.filter(lambda s: 'b' in s).count()
<<< print "Lines with a: %i, lines with b: %i" % (numAs, numBs)
Lines with a: 62, lines with b: 30

Exemple SparkContext - Programme Python

Exécutons le même exemple en utilisant un programme Python. Créez un fichier Python appeléfirstapp.py et entrez le code suivant dans ce fichier.

----------------------------------------firstapp.py---------------------------------------
from pyspark import SparkContext
logFile = "file:///home/hadoop/spark-2.1.0-bin-hadoop2.7/README.md"  
sc = SparkContext("local", "first app")
logData = sc.textFile(logFile).cache()
numAs = logData.filter(lambda s: 'a' in s).count()
numBs = logData.filter(lambda s: 'b' in s).count()
print "Lines with a: %i, lines with b: %i" % (numAs, numBs)
----------------------------------------firstapp.py---------------------------------------

Ensuite, nous exécuterons la commande suivante dans le terminal pour exécuter ce fichier Python. Nous obtiendrons le même résultat que ci-dessus.

$SPARK_HOME/bin/spark-submit firstapp.py
Output: Lines with a: 62, lines with b: 30