Dans Spark, il existe 3 façons principales de spécifier les options pour le SparkConf
utilisé pour créer le SparkContext
:
spark.driver.memory 4g
spark-Shell --driver-memory 4g ...
SparkConf
avant de l'utiliser pour créer le SparkContext
: sparkConf.set( "spark.driver.memory", "4g" )
Cependant, lorsque vous utilisez spark-Shell
, Le SparkContext est déjà créé pour vous au moment où vous obtenez une invite du shell, dans la variable nommée sc
. Lorsque vous utilisez spark-Shell, comment utilisez-vous l'option # 3 dans la liste ci-dessus pour définir les options de configuration, si le SparkContext est déjà créé avant d'avoir la possibilité d'exécuter des instructions Scala?
En particulier, j'essaie d'utiliser la sérialisation Kyro et GraphX. La manière prescrite d'utiliser Kryo avec GraphX est d'exécuter l'instruction Scala lors de la personnalisation de l'instance SparkConf
:
GraphXUtils.registerKryoClasses( sparkConf )
Comment puis-je accomplir cela en exécutant spark-Shell
?
Spark 2.0 +
Vous devriez pouvoir utiliser SparkSession.conf.set
méthode pour définir certains option de configuration à l'exécution mais elle est principalement limitée à la configuration SQL.
Spark <2.0
Vous pouvez simplement arrêter un contexte existant et en créer un nouveau:
import org.Apache.spark.{SparkContext, SparkConf}
sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)
Comme vous pouvez le lire dans la documentation officielle :
une fois qu'un objet SparkConf est passé à Spark, il est cloné et ne peut plus être modifié par l'utilisateur. Spark ne prend pas en charge la modification de la configuration lors de l'exécution.
Donc, comme vous pouvez le voir, arrêter le contexte est la seule option applicable une fois que Shell a été démarré.
Vous pouvez toujours utiliser des fichiers de configuration ou --conf
argument à spark-Shell
pour définir les paramètres requis qui seront utilisés comme contexte par défaut. Dans le cas de Kryo, vous devriez jeter un œil à:
spark.kryo.classesToRegister
spark.kryo.registrator
Voir Compression et sérialisation dans Configuration Spark .