Можно ли получить текущие настройки искрового контекста в PySpark?
Я пытаюсь получить путь к spark.worker.dir
для текущего sparkcontext
.
Если я явно задал его как config param
, я могу прочитать его обратно из SparkConf
, но есть ли вообще доступ к полному config
(включая все значения по умолчанию) с помощью PySpark
?
Ответы
Ответ 1
Да: sc._conf.getAll()
Использует метод:
SparkConf.getAll()
при доступе к
SparkContext.sc._conf
Обратите внимание на подстрочный знак: это делает это сложным. Мне пришлось посмотреть исходный код искры, чтобы понять это;)
Но он работает:
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')]
Ответ 2
Spark 2.1 +
spark.sparkContext.getConf().getAll()
где spark
- ваш sparksession
(дает вам dict
со всеми настроенными настройками)
Ответ 3
Искра 1.6 +
sc.getConf.getAll.foreach(println)
Ответ 4
обновить конфигурацию в Spark 2.3.1
Чтобы изменить настройки искры по умолчанию, вы можете выполнить следующие действия:
Импортируйте необходимые классы
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
Получить настройки по умолчанию
spark.sparkContext._conf.getAll()
Обновите конфигурации по умолчанию
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')])
Остановить текущий сеанс Spark
spark.sparkContext.stop()
Создать сеанс Spark
spark = SparkSession.builder.config(conf=conf).getOrCreate()
Ответ 5
Для полного обзора вашей среды и конфигурации Spark я нашел следующие полезные фрагменты кода:
SparkContext:
for item in sorted(sc._conf.getAll()): print(item)
Конфигурация 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)
Переменные среды:
import os
for item in sorted(os.environ.items()): print(item)
Ответ 6
К сожалению, нет, платформа Spark начиная с версии 2.3.1 не предоставляет программного способа доступа к значению каждого свойства во время выполнения. Он предоставляет несколько методов для доступа к значениям свойств, которые были явно установлены через файл конфигурации (например, spark-defaults.conf
), установлены через объект SparkConf
при создании сеанса или установлены через командную строку при SparkConf
задания, но ни один из этих методов не покажет значение по умолчанию для свойства, которое не было явно установлено. Для полноты картины лучшие варианты:
- Веб-интерфейс приложений Spark, обычно по адресу
http://<driver>:4040
, имеет вкладку "Среда" с таблицей значений свойств. -
SparkContext
сохраняет скрытую ссылку на его конфигурацию в PySpark, а конфигурация обеспечивает getAll
метод: spark.sparkContext._conf.getAll()
. - Spark SQL предоставляет команду
SET
которая будет возвращать таблицу значений свойств: spark.sql("SET").toPandas()
. Вы также можете использовать SET -v
чтобы включить столбец с описанием свойств.
(Все эти три метода возвращают одни и те же данные в моем кластере.)
Ответ 7
Вы можете использовать:
ssc.sparkContext.getConf.getAll
Например, у меня часто есть следующие в верхней части моих программ Spark:
logger.info(ssc.sparkContext.getConf.getAll.mkString("\n"))
Ответ 8
sc.getConf(). getAll() выдаст вам список всех настроек
Ответ 9
Не уверен, что вы можете легко получить все настройки по умолчанию, но специально для рабочего каталога, это довольно сложно: вперед/назад >
from pyspark import SparkFiles
print SparkFiles.getRootDirectory()
Ответ 10
Только для записей аналогичная версия java:
Tuple2<String, String> sc[] = sparkConf.getAll();
for (int i = 0; i < sc.length; i++) {
System.out.println(sc[i]);
}
Ответ 11
Для Spark 2+ вы также можете использовать при использовании Scala
spark.conf.getAll; //spark as spark session
Ответ 12
Показ конфигурации работает с использованием этого, как указано выше...
spark.sparkContext.getConf().getAll()
но я не видел, как показать spark.executor.memory, чтобы определить, какая память доступна для сеанса spark?