确保在应用程序中仅确保一个Spark上下文的良好实践

Tri*_*DEY 5 singleton design-patterns scala apache-spark

我正在寻找一种确保我的应用仅使用一个单一Spark Context(sc)的好方法。在开发过程中,我经常遇到错误,必须重新启动Play!服务器重新测试我的修改。单例模式是否可以解决?

object sparckContextSingleton {
  @transient private var instance: SparkContext = _
  private val conf : SparkConf = new SparkConf()
    .setMaster("local[2]")
    .setAppName("myApp")

  def getInstance(): SparkContext = {
    if (instance == null){
      instance = new SparkContext(conf)
    }
    instance
  }  
}
Run Code Online (Sandbox Code Playgroud)

这做得不好。我应该停止SparkContext吗?

Spa*_*rky 1

这应该足以达到目的,重要的是使用 val 而不是 var。

object SparkContextKeeper {
  val conf = new SparkConf().setAppName("SparkApp")
  val context= new SparkContext(conf)
  val sqlContext = new SQLContext(context)
}
Run Code Online (Sandbox Code Playgroud)