scala - unit - Personalice SparkContext usando sparkConf.set(..) cuando use spark-shell
unit set spark (1)
En Spark, hay 3 formas principales de especificar las opciones para el
SparkConf
utilizado para crear el
SparkContext
:
-
Como propiedades en conf / spark-defaults.conf
-
por ejemplo, la línea:
spark.driver.memory 4g
-
por ejemplo, la línea:
-
Como argumentos a spark-shell o spark-submit
-
por ejemplo,
spark-shell --driver-memory 4g ...
-
por ejemplo,
-
En su código fuente, configure una instancia de
SparkConf
antes de usarla para crear elSparkContext
:-
por ejemplo,
sparkConf.set( "spark.driver.memory", "4g" )
-
por ejemplo,
Sin embargo, cuando se utiliza
spark-shell
, el SparkContext ya está creado para usted cuando obtiene un indicador de shell, en la variable denominada
sc
.
Cuando usa spark-shell, ¿cómo usa la opción # 3 en la lista anterior para configurar las opciones de configuración, si SparkContext ya está creado antes de que tenga la oportunidad de ejecutar cualquier instrucción Scala?
En particular, estoy tratando de usar la serialización Kyro y GraphX.
La forma prescrita de usar Kryo con GraphX es ejecutar la siguiente instrucción Scala al personalizar la instancia de
SparkConf
:
GraphXUtils.registerKryoClasses( sparkConf )
¿Cómo logro esto cuando ejecuto
spark-shell
?
Spark 2.0+
Debería poder utilizar el método
SparkSession.conf.set
para establecer
alguna
opción de configuración en tiempo de ejecución, pero se limita principalmente a la configuración de SQL.
Chispa <2.0
Simplemente puede detener un contexto existente y crear uno nuevo:
import org.apache.spark.{SparkContext, SparkConf}
sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)
Como puedes leer en la documentación oficial :
una vez que un objeto SparkConf se pasa a Spark, se clona y el usuario ya no puede modificarlo. Spark no admite la modificación de la configuración en tiempo de ejecución.
Entonces, como puede ver deteniendo el contexto, es la única opción aplicable una vez que se ha iniciado el shell.
Siempre puede usar archivos de configuración o argumento
--conf
para
spark-shell
para establecer los parámetros requeridos que se usarán como contexto predeterminado.
En el caso de Kryo deberías echar un vistazo a:
-
spark.kryo.classesToRegister
-
spark.kryo.registrator
Consulte Compresión y serialización en la configuración de Spark .