SparkSession:ActiveSession与DefaultSession

时间:2018-07-25 06:07:40

标签: apache-spark

根据API文档:

  

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

     

getDefaultSession()返回   生成器返回的默认SparkSession。

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

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

此外,如果

,我什么时候使用getActiveSession
  1. 在99%的应用中,只有一个会话,并且

  2. getDefaultSession应该返回该会话

1 个答案:

答案 0 :(得分:1)

  • ActiveSession用于单线程,而DefaultSession是全局的。默认情况下,DefaultSession是主线​​程的ActiveSession
  • 每个SparkSession对象共享相同的SparkContext。但是它们可能具有不同的状态,例如SQL配置,临时表和注册的函数。
  • In 99% of apps there is only one session,实际上,您有99%以上是正确的。
  • 何时可能需要ActiveSession
    • 考虑到您正在使用Spark SQL在4个线程中并行处理100个城市数据。
    • 如果您始终使用DefaultSession,则必须为每个数据框使用不同的名称,例如city_1city_2
    • 使用ActiveSession(您可以通过SparkSession.newSession创建新会话),可以注册所有具有相同名称city的临时视图,一切都变得容易。
  • 此外,当SparkSession.active不存在时,助手DefaultSession可以帮助您落入ActiveSession