web-dev-qa-db-fra.com

Est-il possible d’obtenir les paramètres de contexte actuels spark dans PySpark?)

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?

48
whisperstream

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')]
69
javadba

Spark 2.1+

spark.sparkContext.getConf().getAll()spark est votre sparksession (vous donne un dict avec tous les paramètres configurés)

52
Kevad

Spark 1.6+

sc.getConf.getAll.foreach(println)
28
ecesena

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()
13
bob

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)
9
asmaier

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:

  • L’interface utilisateur Web de l’application Spark, généralement située à http://<driver>:4040, Comporte un onglet "Environnement" avec une table des valeurs de propriété.
  • Le SparkContext conserve une référence masquée à sa configuration dans PySpark, laquelle fournit une méthode getAll: spark.sparkContext._conf.getAll().
  • Spark SQL fournit la commande 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.)

4
DGrady

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"))
3
andrewrjones

sc.getConf (). getAll () vous donnera une liste avec tous les paramètres

1
Rohit

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]);
}
0
Aydin K.

Pour Spark 2+, vous pouvez également utiliser l’utilisation de scala.

spark.conf.getAll; //spark as spark session 
0
xuanyue

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()
0
whisperstream