apache spark - true - ¿Es posible obtener la configuración actual del contexto de chispa en PySpark?
spark-submit (9)
Estoy tratando de obtener el camino para spark.worker.dir
para el actual sparkcontext
.
Si lo configuré explícitamente como un config param
, puedo volver a leerlo desde SparkConf
, pero ¿hay SparkConf
forma de acceder a la config
completa (incluidos todos los valores predeterminados) utilizando PySpark
?
No estoy seguro si puede obtener todas las configuraciones predeterminadas fácilmente, pero específicamente para el directorio de trabajo, es bastante directo:
from pyspark import SparkFiles
print SparkFiles.getRootDirectory()
Para Spark 2+ también puedes usar cuando usas scala
spark.conf.getAll; //spark as spark session
Para una descripción completa de su entorno y configuración Spark, encontré útiles los siguientes fragmentos de código:
SparkContext:
for item in sorted(sc._conf.getAll()): print(item)
Configuración de Hadoop:
hadoopConf = {}
iterator = sc._jsc.hadoopConfiguration().iterator()
while iterator.hasNext():
prop = iterator.next()
hadoopConf[prop.getKey()] = prop.getValue()
for item in sorted(hadoopConf.items()): print(item)
Variables de entorno:
import os
for item in sorted(os.environ.items()): print(item)
Puedes usar:
ssc.sparkContext.getConf.getAll
Por ejemplo, a menudo tengo lo siguiente en la parte superior de mis programas Spark:
logger.info(ssc.sparkContext.getConf.getAll.mkString("/n"))
Sí: sc._conf.getAll ()
Que usa el método:
SparkConf.getAll()
como se accede por
SparkContext.sc._conf
Tenga en cuenta el subrayado: eso hace que esto sea complicado. Tuve que mirar el código fuente de la chispa para resolverlo;)
Pero funciona:
In [4]: sc._conf.getAll()
Out[4]:
[(u''spark.master'', u''local''),
(u''spark.rdd.compress'', u''True''),
(u''spark.serializer.objectStreamReset'', u''100''),
(u''spark.app.name'', u''PySparkShell'')]
Solo para los registros, la versión análoga de Java:
Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
System.out.println(sc[i]);
}
Spark 1.6+
sc.getConf.getAll.foreach(println)
Spark 2.1+
spark.sparkContext.getConf().getAll()
donde spark
es tu sparksession
(te da un dict
con todas las configuraciones configuradas)
configuración de actualización en Spark 2.3.1
Para cambiar las configuraciones de chispa predeterminadas, puede seguir estos pasos:
Importar las clases requeridas
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
Obtenga las configuraciones predeterminadas
spark.sparkContext._conf.getAll()
Actualiza las configuraciones predeterminadas
conf = spark.sparkContext._conf.setAll([(''spark.executor.memory'', ''4g''), (''spark.app.name'', ''Spark Updated Conf''), (''spark.executor.cores'', ''4''), (''spark.cores.max'', ''4''), (''spark.driver.memory'',''4g'')])
Detener la Sesión de Spark actual
spark.sparkContext.stop()
Crear una sesión Spark
spark = SparkSession.builder.config(conf=conf).getOrCreate()