J'essaie d'obtenir le chemin d'accès à spark.worker.dir
Pour le sparkcontext
actuel.
Si je le définit explicitement comme un config param
, Je peux le relire à partir de SparkConf
, mais y a-t-il un moyen d'accéder à l'intégralité de config
(y compris tous les défauts) en utilisant PySpark
?
Oui: sc._conf.getAll ()
Qui utilise la méthode:
SparkConf.getAll()
comme accédé par
SparkContext.sc._conf
Notez le trait de soulignement: cela rend la tâche difficile. Je devais regarder le code source spark pour le comprendre;)
Mais, il fonctionne:
In [4]: sc._conf.getAll()
Out[4]:
[(u'spark.master', u'local'),
(u'spark.rdd.compress', u'True'),
(u'spark.serializer.objectStreamReset', u'100'),
(u'spark.app.name', u'PySparkShell')]
Spark 2.1+
spark.sparkContext.getConf().getAll()
où spark
est votre sparksession
(vous donne un dict
avec tous les paramètres configurés)
Spark 1.6+
sc.getConf.getAll.foreach(println)
mettre à jour la configuration dans Spark 2.3.1
Pour modifier les configurations par défaut spark), procédez comme suit:
Importer les classes requises
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
Récupère les configurations par défaut
spark.sparkContext._conf.getAll()
met à jour les configurations par défaut
conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), ('spark.app.name', 'Spark Updated Conf'), ('spark.executor.cores', '4'), ('spark.cores.max', '4'), ('spark.driver.memory','4g')])
Arrête le courant Spark Session
spark.sparkContext.stop()
Créer une Spark Session
spark = SparkSession.builder.config(conf=conf).getOrCreate()
Pour un aperçu complet de votre environnement et de votre configuration Spark), j'ai trouvé les extraits de code suivants utiles:
SparkContext:
for item in sorted(sc._conf.getAll()): print(item)
Configuration Hadoop:
hadoopConf = {}
iterator = sc._jsc.hadoopConfiguration().iterator()
while iterator.hasNext():
prop = iterator.next()
hadoopConf[prop.getKey()] = prop.getValue()
for item in sorted(hadoopConf.items()): print(item)
Variables d'environnement:
import os
for item in sorted(os.environ.items()): print(item)
Malheureusement, non, la plate-forme Spark à partir de la version 2.3.1 ne fournit aucun moyen d'accéder par programme à la valeur de chaque propriété au moment de l'exécution. Elle propose plusieurs méthodes pour accéder aux valeurs des propriétés ont été définis explicitement via un fichier de configuration (comme spark-defaults.conf
), via l'objet SparkConf
lors de la création de la session ou via la ligne de commande lorsque vous avez soumis le travail, mais aucune de ces méthodes affichera la valeur par défaut d’une propriété qui n’a pas été explicitement définie. Pour être complet, les meilleures options sont les suivantes:
http://<driver>:4040
, Comporte un onglet "Environnement" avec une table des valeurs de propriété.SparkContext
conserve une référence masquée à sa configuration dans PySpark, laquelle fournit une méthode getAll
: spark.sparkContext._conf.getAll()
.SET
qui renverra une table de valeurs de propriétés: spark.sql("SET").toPandas()
. Vous pouvez également utiliser SET -v
Pour inclure une colonne avec la description de la propriété.(Ces trois méthodes renvoient toutes les mêmes données sur mon cluster.)
Vous pouvez utiliser:
ssc.sparkContext.getConf.getAll
Par exemple, les éléments suivants figurent souvent en haut de mes Spark programmes:
logger.info(ssc.sparkContext.getConf.getAll.mkString("\n"))
sc.getConf (). getAll () vous donnera une liste avec tous les paramètres
Juste pour les enregistrements, l'analogue Java version:
Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
System.out.println(sc[i]);
}
Pour Spark 2+, vous pouvez également utiliser l’utilisation de scala.
spark.conf.getAll; //spark as spark session
Vous ne savez pas si vous pouvez facilement obtenir tous les paramètres par défaut, mais spécifiquement pour le répertoire worker, c'est assez direct:
from pyspark import SparkFiles
print SparkFiles.getRootDirectory()