PySpark - SparkContext

SparkContext es el punto de entrada a cualquier funcionalidad de Spark. Cuando ejecutamos cualquier aplicación Spark, se inicia un programa controlador, que tiene la función principal y su SparkContext se inicia aquí. El programa controlador luego ejecuta las operaciones dentro de los ejecutores en los nodos trabajadores.

SparkContext usa Py4J para lanzar un JVM y crea un JavaSparkContext. Por defecto, PySpark tiene SparkContext disponible como‘sc’, por lo que crear un nuevo SparkContext no funcionará.

El siguiente bloque de código tiene los detalles de una clase PySpark y los parámetros que puede tomar 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'>
)

Parámetros

A continuación se muestran los parámetros de SparkContext.

  • Master - Es la URL del clúster al que se conecta.

  • appName - Nombre de su trabajo.

  • sparkHome - Directorio de instalación de Spark.

  • pyFiles - Los archivos .zip o .py para enviar al clúster y agregar a PYTHONPATH.

  • Environment - Variables de entorno de los nodos trabajadores.

  • batchSize- El número de objetos Python representados como un solo objeto Java. Configure 1 para deshabilitar el procesamiento por lotes, 0 para elegir automáticamente el tamaño del lote según el tamaño de los objetos o -1 para usar un tamaño de lote ilimitado.

  • Serializer - Serializador RDD.

  • Conf - Un objeto de L {SparkConf} para establecer todas las propiedades de Spark.

  • Gateway - Utilice una puerta de enlace y una JVM existentes; de lo contrario, inicialice una nueva JVM.

  • JSC - La instancia de JavaSparkContext.

  • profiler_cls - Una clase de Profiler personalizado que se usa para crear perfiles (el valor predeterminado es pyspark.profiler.BasicProfiler).

Entre los parámetros anteriores, master y appnamese utilizan principalmente. Las dos primeras líneas de cualquier programa PySpark se ven como se muestra a continuación:

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

Ejemplo de SparkContext: PySpark Shell

Ahora que sabe lo suficiente sobre SparkContext, ejecutemos un ejemplo simple en el shell de PySpark. En este ejemplo, contaremos el número de líneas con el carácter 'a' o 'b' en elREADME.mdarchivo. Entonces, digamos que si hay 5 líneas en un archivo y 3 líneas tienen el carácter 'a', entonces la salida será →Line with a: 3. Lo mismo se hará con el carácter 'b'.

Note- No estamos creando ningún objeto SparkContext en el siguiente ejemplo porque, de forma predeterminada, Spark crea automáticamente el objeto SparkContext llamado sc, cuando se inicia PySpark shell. En caso de que intente crear otro objeto SparkContext, obtendrá el siguiente error:"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

Ejemplo de SparkContext: programa Python

Ejecutemos el mismo ejemplo usando un programa de Python. Crea un archivo de Python llamadofirstapp.py e ingrese el siguiente código en ese archivo.

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

Luego ejecutaremos el siguiente comando en la terminal para ejecutar este archivo de Python. Obtendremos el mismo resultado que el anterior.

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