簡體   English   中英

如何在Scala中實現真正的Singleton

[英]How to implement a real Singleton in Scala

我混合了Java / Scala項目。 有一些用Java實現並使用某些Scala類的Quartz作業。 這些類應使用相同的SparkContext實例,因此我實現了一些單例形式,如下所示:

object SparkContextLoader {
    var hasSC = false
    var sc:Any = 0
    def getSC(workers):SparkContext={
    if (!hasSC) {
        val sparkConf = new SparkConf().setMaster("local[" + workers + "]").setAppName("SparkApp")
        sc = new SparkContext(sparkConf)
        hasSC = true
    }
    return sc.asInstanceOf[SparkContext]
}

從兩個不同的作業調用SparkContextLoader始終會創建一個不允許的新SparkContext實例。

為什么Scala對象的行為不像單例?

您的代碼過於復雜。 如果“兩個不同的作業”是不同的線程,那么您需要做的是:

object SparkContextLoader {

  val sparkConf = new SparkConf().setMaster("local[" + workers + "]").setAppName("SparkApp")

  val sc = new SparkContext(sparkConf)
}

然后,您可以使用此問題的答案訪問這些值。

如果“兩個不同的作業”是不同的Java應用程序,那么似乎沒有辦法在兩個應用程序之間共享一個單例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM