Настройте SparkContext с помощью sparkConf.set(..) при использовании искровой оболочки

В Spark есть 3 основных способа указать параметры для SparkConf, используемые для создания SparkContext:

  • Как свойства в conf/spark-defaults.conf
    • например, строка: spark.driver.memory 4g
  • Как утверждает искр-оболочка или искра-submit
    • например, spark-shell --driver-memory 4g ...
  • В исходном коде, настроив экземпляр SparkConf, прежде чем использовать его для создания SparkContext:
    • например, sparkConf.set( "spark.driver.memory", "4g" )

Однако при использовании spark-shell, SparkContext уже создан для вас к моменту получения приглашения оболочки в переменной с именем sc. При использовании искровой оболочки, как вы используете опцию № 3 в списке выше, чтобы задать параметры конфигурации, если SparkContext уже создан до того, как вы сможете выполнить какие-либо инструкции Scala?

В частности, я пытаюсь использовать сериализацию Kyro и GraphX. Предписанный способ использования Kryo с GraphX ​​заключается в выполнении следующего оператора Scala при настройке экземпляра SparkConf:

GraphXUtils.registerKryoClasses( sparkConf )

Как это сделать при запуске spark-shell?

Ответ 1

Spark 2.0 +

Вы можете использовать метод SparkSession.conf.set для установки какой-либо опции конфигурации во время выполнения, но в основном она ограничена конфигурацией SQL.

Spark & ​​lt; 2.0

Вы можете просто остановить существующий контекст и создать новый:

import org.apache.spark.{SparkContext, SparkConf}

sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)

Как вы можете прочитать официальную документацию :

как только объект SparkConf передается Spark, он клонируется и больше не может быть изменен пользователем. Spark не поддерживает изменение конфигурации во время выполнения.

Так как вы можете видеть, что остановка контекста является единственной применимой опцией после запуска оболочки.

Вы всегда можете использовать конфигурационные файлы или аргумент --conf для spark-shell для установки необходимых параметров, которые будут использоваться в контексте по умолчанию. В случае с Крио вы должны взглянуть на:

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

См. Сжатие и сериализация в Конфигурация искры.