如何在代码的任何位置获取当前的SparkSession

PC9*_*527 12 scala apache-spark

我在main()函数中创建了一个会话,如下所示:

val sparkSession = SparkSession.builder.master("local[*]").appName("Simple Application").getOrCreate()
Run Code Online (Sandbox Code Playgroud)

现在,如果我想配置应用程序或访问属性,我可以sparkSession在同一个函数中使用局部变量.

如果我想访问此sparkSession在同一项目中的其他地方一样project/module/.../.../xxx.scala.我该怎么办?

Tza*_*har 19

创建会话后(任何地方),您可以安全地使用:

SparkSession.builder().getOrCreate()
Run Code Online (Sandbox Code Playgroud)

只要会话仍然存在,可以在代码中的任何位置获得(相同)会话.Spark维护一个活动会话,因此除非它被停止或崩溃,否则你将得到相同的会话.


小智 5

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)
Run Code Online (Sandbox Code Playgroud)

默认 SparkSession

/**
 * Returns the default SparkSession that is returned by the builder.
 *
 * @since 2.2.0
 */
def getDefaultSparkSession: Option[SparkSession] = Option(defaultSession.get)
Run Code Online (Sandbox Code Playgroud)