error de SparkContexts múltiple en tutorial

Estoy intentando ejecutar el tutorial muy básico de Spark + Python pyspark; consulte http://spark.apache.org/docs/0.9.0/quick-start.html

Cuando bash inicializar un nuevo SparkContext,

from pyspark import SparkContext sc = SparkContext("local[4]", "test") 

Obtuve el siguiente error:

 ValueError: Cannot run multiple SparkContexts at once 

Me pregunto si mis bashs anteriores de ejecutar código de ejemplo cargaron algo en la memoria que no se borró. ¿Hay alguna forma de enumerar los SparkContexts actuales en la memoria y / o eliminarlos para que se ejecute el código de muestra?

Esto sucede porque cuando escribes “pyspark” en la terminal, el sistema inicializa automáticamente SparkContext (¿quizás un objeto?), Por lo que debes detenerlo antes de crear uno nuevo.

Puedes usar

 sc.stop() 

Antes de crear tu nuevo SparkContext.

Además, puedes usar

 sc = SparkContext.getOrCreate() 

en lugar de

 sc = SparkContext() 

Soy nuevo en Spark y no sé mucho sobre el significado de los parámetros de la función SparkContext (), pero el código que se muestra arriba funcionó para mí.

Resulta que ejecutar ./bin/pyspark interactivamente AUTOMÁTICAMENTE CARGA UN SPARKCONTEXT. Esto es lo que veo cuando comienzo a pyspark:

 Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 0.9.1 /_/ Using Python version 2.6.6 (r266:84292, Feb 22 2013 00:00:18) Spark context available as sc. 

… para que pueda ejecutar “del sc” al principio o seguir adelante y usar “sc” como se define automáticamente.

El otro problema con el ejemplo es que parece mirar una ubicación regular del sistema de archivos NFS, mientras que realmente está tratando de mirar el sistema de archivos HDFS para Hadoop. Tuve que cargar el archivo README.md en la ubicación de $ SPARK_HOME usando “hadoop fs -put README.md README.md” antes de ejecutar el código.

Aquí está el progtwig de ejemplo modificado que ejecuté interactivamente:

 from pyspark import SparkContext logFile = "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) 

Y aquí está la versión modificada del archivo de Python independiente:

 """SimpleApp.py""" from pyspark import SparkContext logFile = "README.md" # Should be some file on your system sc = SparkContext("local", "Simple 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) 

que ahora puedo ejecutar usando $ SPARK_HOME / bin / pyspark SimpleApp.py

¿Ha intentado usar sc.stop () antes de intentar crear otro SparkContext?

En lugar de configurar configuraciones personalizadas para el indicador de SparkContext en PySpark, puede establecerlas al momento de iniciar PySpark.

p.ej

 pyspark --master yarn --queue my_spark_pool1 --conf spark.driver.extraLibraryPath="${LD_LIBRARY_PATH}" --conf spark.executorEnv.LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" 

Aplicará estas conf al objeto sc en PySpark.