PySpark - SparkContext

SparkContext è il punto di ingresso per qualsiasi funzionalità Spark. Quando eseguiamo un'applicazione Spark, viene avviato un programma driver, che ha la funzione principale e il tuo SparkContext viene avviato qui. Il programma driver esegue quindi le operazioni all'interno degli esecutori sui nodi di lavoro.

SparkContext usa Py4J per avviare un file JVM e crea un file JavaSparkContext. Per impostazione predefinita, PySpark ha SparkContext disponibile come‘sc’, quindi la creazione di un nuovo SparkContext non funzionerà.

Il blocco di codice seguente contiene i dettagli di una classe PySpark e i parametri che possono essere accettati da SparkContext.

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'>
)

Parametri

Di seguito sono riportati i parametri di SparkContext.

  • Master - È l'URL del cluster a cui si connette.

  • appName - Nome del tuo lavoro.

  • sparkHome - Directory di installazione di Spark.

  • pyFiles - I file .zip o .py da inviare al cluster e da aggiungere a PYTHONPATH.

  • Environment - Variabili di ambiente dei nodi di lavoro.

  • batchSize- Il numero di oggetti Python rappresentati come un singolo oggetto Java. Impostare 1 per disabilitare il batch, 0 per scegliere automaticamente la dimensione del batch in base alle dimensioni degli oggetti o -1 per utilizzare una dimensione del batch illimitata.

  • Serializer - serializzatore RDD.

  • Conf - Un oggetto di L {SparkConf} per impostare tutte le proprietà di Spark.

  • Gateway - Utilizza un gateway e una JVM esistenti, altrimenti inizializza una nuova JVM.

  • JSC - L'istanza JavaSparkContext.

  • profiler_cls - Una classe di Profiler personalizzato utilizzata per eseguire la profilazione (l'impostazione predefinita è pyspark.profiler.BasicProfiler).

Tra i parametri di cui sopra, master e appnamesono principalmente usati. Le prime due righe di qualsiasi programma PySpark hanno l'aspetto mostrato di seguito:

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

Esempio di SparkContext - PySpark Shell

Ora che ne sai abbastanza di SparkContext, eseguiamo un semplice esempio sulla shell di PySpark. In questo esempio, conteremo il numero di righe con il carattere "a" o "b" nel fileREADME.mdfile. Quindi, diciamo se ci sono 5 righe in un file e 3 righe hanno il carattere 'a', l'output sarà →Line with a: 3. Lo stesso sarà fatto per il carattere "b".

Note- Non stiamo creando alcun oggetto SparkContext nell'esempio seguente perché, per impostazione predefinita, Spark crea automaticamente l'oggetto SparkContext denominato sc, all'avvio della shell PySpark. Nel caso in cui provi a creare un altro oggetto SparkContext, riceverai il seguente errore:"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

Esempio di SparkContext - Programma Python

Eseguiamo lo stesso esempio usando un programma Python. Crea un file Python chiamatofirstapp.py e inserisci il codice seguente in quel file.

----------------------------------------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---------------------------------------

Quindi eseguiremo il seguente comando nel terminale per eseguire questo file Python. Otterremo lo stesso output di cui sopra.

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