Personalice SparkContext usando sparkConf.set (..) cuando use spark-shell

En Spark, hay 3 formas principales de especificar las opciones para el SparkConf utilizado para crear el SparkContext :

  1. Como propiedades en conf / spark-defaults.conf
    • por ejemplo, la línea: spark.driver.memory 4g
  2. Como args to spark-shell o spark-submit
    • por ejemplo, spark-shell --driver-memory 4g ...
  3. En su código fuente, configure una instancia de SparkConf antes de usarla para crear SparkContext :
    • por ejemplo, sparkConf.set( "spark.driver.memory", "4g" )

Sin embargo, al usar spark-shell , SparkContext ya está creado para usted cuando obtiene un mensaje de shell, en la variable llamada sc . Cuando se usa spark-shell, ¿cómo se usa la opción n. ° 3 en la lista anterior para establecer las opciones de configuración, si el SparkContext ya se ha creado antes de poder ejecutar cualquier statement de Scala?

En particular, estoy tratando de usar la serialización de Kyro y GraphX. La forma prescrita de usar Kryo con GraphX ​​es ejecutar la siguiente statement de Scala al personalizar la instancia de SparkConf :

 GraphXUtils.registerKryoClasses( sparkConf ) 

¿Cómo logro esto cuando ejecuto spark-shell ?

Spark 2.0+

Debería poder usar el método SparkSession.conf.set para establecer alguna opción de configuración en el tiempo de ejecución, pero se limita principalmente a la configuración de SQL.

Spark <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 ya no puede ser modificado por el usuario. Spark no es compatible con la modificación de la configuración en tiempo de ejecución.

Entonces, como puede ver, detener el contexto es la única opción aplicable una vez que se ha iniciado el shell.

Siempre puede usar archivos de configuración o --conf argument to spark-shell para establecer los parámetros requeridos que se usarán en el contexto predeterminado. En el caso de Kryo, deberías echarle un vistazo a:

  • spark.kryo.classesToRegister
  • spark.kryo.registrator

Ver compresión y serialización en Spark Configuration .