Est-il possible d'obtenir les paramètres de contexte spark actuels dans PySpark?
j'essaie d'obtenir le chemin vers spark.worker.dir
pour sparkcontext
.
si je l'ai explicitement défini comme un config param
, je peux le lire à l'arrière d' SparkConf
, mais est-il de toute façon d'accéder à tout l' config
(incluant toutes les valeurs par défaut) en utilisant <!--5?
10 réponses
Oui: sc._conf.getAll ()
Qui utilise la méthode:
SparkConf.getAll()
accès par
SparkContext.sc._conf
Notez le Underscore: cela rend cette tâche délicate. J'ai dû regarder l'étincelle de code source pour 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
votre sparksession
(vous donne un dict
avec tous les paramètres configurés)
pour un aperçu complet de votre environnement Spark et de votre configuration, 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)
Vous pouvez utiliser:
ssc.sparkContext.getConf.getAll
par exemple, j'ai souvent les suivants au sommet de mes programmes Spark:
logger.info(ssc.sparkContext.getConf.getAll.mkString("\n"))
mise à jour de la configuration dans Spark 2.3.1
pour modifier les configurations d'étincelles par défaut, vous pouvez suivre les étapes suivantes:
importer les classes requises
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
Obtenir les configurations par défaut
spark.sparkContext._conf.getAll()
mettre à 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êter la Spark Session
spark.sparkContext.stop()
Créer une Étincelle Session
spark = SparkSession.builder.config(conf=conf).getOrCreate()
pas sûr si vous pouvez obtenir tous les paramètres par défaut facilement, mais spécifiquement pour le worker dir, il est tout à fait straigt-forward:
from pyspark import SparkFiles
print SparkFiles.getRootDirectory()
Juste pour les enregistrements de la même version de java:
Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
System.out.println(sc[i]);
}
Pour le Spark 2+, vous pouvez également utiliser lors de l'utilisation de scala
spark.conf.getAll; //spark as spark session
malheureusement, non, la plate-forme Spark de la version 2.3.1 ne fournit aucun moyen d'accéder programmatiquement à la valeur de chaque propriété au moment de l'exécution. Il fournit plusieurs méthodes pour accéder aux valeurs des propriétés qui ont été explicitement définies à travers un fichier de configuration (comme spark-defaults.conf
), passe par le SparkConf
object lorsque vous avez créé la session, ou défini la ligne de commande lorsque vous avez soumis la tâche, mais aucune de ces méthodes n'affichera la valeur par défaut pour une propriété qui n'était pas définir explicitement. Pour être complet, les meilleures options sont les suivantes:
- L'interface Web de L'application Spark, généralement à
http://<driver>:4040
, a un onglet" environnement " avec une table de valeur de propriété. SparkContext
conserve une référence cachée à sa configuration dans PySpark, et la configuration fournit ungetAll
méthode:spark.sparkContext._conf.getAll()
.- Spark SQL fournit
SET
commande qui retourne un tableau de valeurs de propriété:spark.sql("SET").toPandas()
. Vous pouvez également utiliserSET -v
pour inclure une colonne avec la propriété de la description.
(Ces trois méthodes sont toutes les mêmes données sur mon cluster.)