Spark 2.0: переопределение параметров SparkSession через GetOrCreate и отсутствие изменений в WebUI
Я использую Spark 2.0 с pySpark.
Я переиначивая SparkSession
параметры через GetOrCreate
метод, который был введен в версии 2.0:
этот метод сначала проверяет, существует ли допустимый глобальный сеанс SparkSession по умолчанию, и если да, верните его. Если не существует допустимого глобального сеанса SparkSession по умолчанию, метод создает новый сеанс SparkSession и назначает вновь созданный сеанс SparkSession в качестве глобального по умолчанию.
в случае, если существующая SparkSession возвращенные параметры конфигурации, указанные в этом построителе, будут применены к существующему сеансу SparkSession.
так:
from pyspark import SparkConf
SparkConf().toDebugString()
'spark.app.name=pyspark-shellnspark.master=local[2]nspark.submit.deployMode=client'
spark.conf.get("spark.app.name")
'pyspark-shell'
тогда я переопределить SparkSession
config с обещанием увидеть изменения в WebUI
appName (имя)
Задает имя приложения, которое будет отображаться в веб-интерфейсе Spark.
c = SparkConf()
(c
.setAppName("MyApp")
.setMaster("local")
.set("spark.driver.memory","1g")
)
from pyspark.sql import SparkSession
(SparkSession
.builder
.enableHiveSupport() # metastore, serdes, Hive udf
.config(conf=c)
.getOrCreate())
spark.conf.get("spark.app.name")
'MyApp'
теперь, когда я иду localhost:4040
, Я ожидал бы увидеть MyApp
как имя приложения.
однако, я все еще вижу pyspark-shell application UI
где я ошибаюсь?
спасибо заранее!
1 ответов
я считаю, что документация здесь немного вводит в заблуждение, и когда вы работаете с Scala, вы действительно видите предупреждение:
... WARN SparkSession$Builder: Use an existing SparkSession, some configuration may not take effect.
это было более очевидно до Spark 2.0 с четким разделением между контекстами:
-
SparkContext
конфигурация не может быть изменена во время выполнения. Вы должны остановить существующий контекст. -
SQLContext
конфигурация может быть изменена во время выполнения.
spark.app.name
, как и многие другие параметры, обязательно SparkContext
, и не может быть изменен без остановки контексте.
повторное использование существующих SparkContext
/ SparkSession
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
spark.conf.get("spark.sql.shuffle.partitions")
String = 200
val conf = new SparkConf()
.setAppName("foo")
.set("spark.sql.shuffle.partitions", "2001")
val spark = SparkSession.builder.config(conf).getOrCreate()
... WARN SparkSession$Builder: Use an existing SparkSession ...
spark: org.apache.spark.sql.SparkSession = ...
spark.conf.get("spark.sql.shuffle.partitions")
String = 2001
пока spark.app.name
конфигурация обновляется:
spark.conf.get("spark.app.name")
String = foo
это не влияет на SparkContext
:
spark.sparkContext.appName
String = Spark shell
прекращение существующих SparkContext
/ SparkSession
теперь давайте остановим сеанс и повторим процесс:
spark.stop
val spark = SparkSession.builder.config(conf).getOrCreate()
... WARN SparkContext: Use an existing SparkContext ...
spark: org.apache.spark.sql.SparkSession = ...
spark.sparkContext.appName
String = foo
интересно, когда мы останавливаем сеанс, мы все равно получаем предупреждение об использовании существующего SparkContext
, но вы можете проверить, что он действительно остановлен.