Как я могу получить текущий SparkSession в любом месте кодов?
Я создал сессию в функции main()
, например:
val sparkSession = SparkSession.builder.master("local[*]").appName("Simple Application").getOrCreate()
Теперь, если я хочу настроить приложение или получить доступ к свойствам, я могу использовать локальную переменную sparkSession
в той же функции.
Что делать, если я хочу получить доступ к этой sparkSession
другом месте в том же проекте, например project/module/.../.../xxx.scala
. Что я должен делать?
Ответы
Ответ 1
После создания сеанса (в любом месте) вы можете безопасно использовать:
SparkSession.builder().getOrCreate()
Чтобы получить (тот же) сеанс в любом месте кода, пока сеанс все еще жив. Spark поддерживает один активный сеанс, поэтому, если он не был остановлен или не разбился, вы получите тот же самый.
Ответ 2
Начиная с 2.2.0 вы можете получить доступ к активной SparkSession через:
/**
* Returns the active SparkSession for the current thread, returned by the builder.
*
* @since 2.2.0
*/
def getActiveSession: Option[SparkSession] = Option(activeThreadSession.get)
или по умолчанию SparkSession:
/**
* Returns the default SparkSession that is returned by the builder.
*
* @since 2.2.0
*/
def getDefaultSparkSession: Option[SparkSession] = Option(defaultSession.get)
Ответ 3
Когда переменная SparkSession
определена как
val sparkSession = SparkSession.builder.master("local[*]").appName("Simple Application").getOrCreate()
Эта переменная будет point/refer
только на одну SparkSession
как ее val
. И вы всегда можете перейти к различным классам для доступа к ним, а также
val newClassCall = new NewClass(sparkSession)
Теперь вы можете использовать тот же самый sparkSession
в этом новом классе.