SparkSession:ActiveSession与DefaultSession

Jak*_*ke 7 apache-spark

根据API文档:

getActiveSession()返回构建器返回的当前线程的活动SparkSession。

getDefaultSession()返回构建器返回的默认SparkSession。

我(很可能是错误地)getActiveSession用来在多个线程中检索SparkSessionSparkContext在某些函数中。有时未定义activeSession(很可能是因为线程刚刚启动)。

有人可以解释两者之间的区别,还是API文档足够自解释?

另外,我当会用getActiveSession,如果

  1. 在99%的应用中,只有一个会话,

  2. getDefaultSession 应该返回该会话

Dea*_* Xu 6

  • ActiveSession用于单线程,而用于DefaultSession全局。该DefaultSessionActiveSession由默认的主线程。
  • 每个SparkSession对象共享相同的SparkContext. 但它们可能有不同的状态,如 SQL 配置、临时表和注册函数。
  • In 99% of apps there is only one session,你说得对,其实超过99%。
  • ActiveSession什么时候可能需要?
    • 假设您使用 Spark SQL 在 4 个线程中并行处理 100 个城市数据。
    • 如果您总是使用DefaultSession,则必须为每个数据框使用不同的名称,例如city_1, city_2
    • 使用ActiveSession(您可以通过创建新会话SparkSession.newSession),您可以注册所有具有相同名称的临时视图city,一切都变得简单。
  • 此外,帮助者SparkSession.active可以帮助您DefaultSessionActiveSession不存在时坠落