Как я могу получить текущий 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 в этом новом классе.