ways unit the spark are all scala apache-spark serialization kryo

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 :

  1. Como propiedades en conf / spark-defaults.conf
    • por ejemplo, la línea: spark.driver.memory 4g
  2. Como argumentos a 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 el SparkContext :
    • por ejemplo, sparkConf.set( "spark.driver.memory", "4g" )

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 .