PySpark - SparkContext

SparkContext é o ponto de entrada para qualquer funcionalidade de faísca. Quando executamos qualquer aplicativo Spark, um programa de driver é iniciado, que tem a função principal e seu SparkContext é iniciado aqui. O programa driver então executa as operações dentro dos executores nos nós de trabalho.

SparkContext usa Py4J para lançar um JVM e cria um JavaSparkContext. Por padrão, o PySpark tem SparkContext disponível como‘sc’, portanto, criar um novo SparkContext não funcionará.

O bloco de código a seguir contém os detalhes de uma classe PySpark e os parâmetros que um SparkContext pode usar.

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 seguir estão os parâmetros de um SparkContext.

  • Master - É a URL do cluster ao qual ele se conecta.

  • appName - Nome do seu trabalho.

  • sparkHome - Diretório de instalação do Spark.

  • pyFiles - Os arquivos .zip ou .py a serem enviados ao cluster e adicionados ao PYTHONPATH.

  • Environment - Variáveis ​​de ambiente dos nós de trabalho.

  • batchSize- O número de objetos Python representados como um único objeto Java. Defina 1 para desativar o lote, 0 para escolher automaticamente o tamanho do lote com base nos tamanhos dos objetos ou -1 para usar um tamanho de lote ilimitado.

  • Serializer - serializador RDD.

  • Conf - Um objeto de L {SparkConf} para definir todas as propriedades do Spark.

  • Gateway - Use um gateway e JVM existentes, caso contrário, inicialize uma nova JVM.

  • JSC - A instância JavaSparkContext.

  • profiler_cls - Uma classe de Profiler customizado usada para fazer perfis (o padrão é pyspark.profiler.BasicProfiler).

Entre os parâmetros acima, master e appnamesão usados ​​principalmente. As primeiras duas linhas de qualquer programa PySpark têm a aparência mostrada abaixo -

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

Exemplo de SparkContext - PySpark Shell

Agora que você sabe o suficiente sobre SparkContext, vamos executar um exemplo simples no shell PySpark. Neste exemplo, estaremos contando o número de linhas com o caractere 'a' ou 'b' noREADME.mdArquivo. Então, digamos que se houver 5 linhas em um arquivo e 3 linhas tiverem o caractere 'a', a saída será →Line with a: 3. O mesmo será feito para o caractere 'b'.

Note- Não estamos criando nenhum objeto SparkContext no exemplo a seguir porque, por padrão, o Spark cria automaticamente o objeto SparkContext denominado sc, quando o shell PySpark é iniciado. Caso você tente criar outro objeto SparkContext, obterá o seguinte erro -"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

Exemplo de SparkContext - programa Python

Vamos executar o mesmo exemplo usando um programa Python. Crie um arquivo Python chamadofirstapp.py e digite o código a seguir nesse arquivo.

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

Em seguida, executaremos o seguinte comando no terminal para executar este arquivo Python. Obteremos a mesma saída acima.

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