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


0

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

val sparkSession = SparkSession.builder.master("local[*]").appName("Simple Application").getOrCreate()

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

如果我想在同一个项目中的其他地方访问这个sparksession,比如project/module/…/…/xxx.scala,该怎么办?我该怎么办?

3 答案

0

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

SparkSession.builder().getOrCreate()

获取代码中任何位置的(相同)会话,只要该会话仍然存在。spark维护一个单独的活动会话,所以除非它被停止或崩溃,否则您将得到相同的会话。


0

从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)

0

当sparksession变量定义为

val sparkSession = SparkSession.builder.master("local[*]").appName("Simple Application").getOrCreate()

此变量将只指向/引用一个sparksession作为其值,并且您可以始终传递到不同的类,以便它们访问

val newClassCall = new NewClass(sparkSession)

现在您也可以在这个新类中使用相同的SparkSession。


我来回答