2016-03-31 8 views
0

Wo in einer Scala-Anwendung ist der beste Ort, um eine Spark broadcast Variable zu speichern, so dass es an anderer Stelle in der App referenziert werden kann?Wie Sie einen Verweis auf Broadcast-Variable halten

val broadcast:Broadcast = ... 

Es ist nicht möglich zu sein scheint es in einem Object zu sparen, denn:

  • ein Objekt nicht eine nicht initialisierte Variable kann, so dass es nicht durch geben einen Verweis auf die Sendung variabel sein kann Aufrufen einer Methode für das Objekt zum Festlegen der Referenz.
  • ein Objekt kann die Broadcast-Variable nicht selbst einrichten, da ein Objekt keinen Konstruktor hat, in den ein Verweis auf den SparkContext übergeben werden kann.

Dank

+0

und so was ist die Frage? – eliasah

+0

Wie kann ich eine Referenz auf eine Broadcast-Variable in einer Scala-Anwendung speichern, so dass auf sie an anderer Stelle in der Anwendung zugegriffen werden kann (Funktionen, die an RDDs übergeben werden, die in verschiedenen Klassen leben). Wenn Sie einen Beispielcode haben, ist es sehr geschätzt. – user1052610

Antwort

0

ein var eher verwenden als eine val wahrscheinlich die Lösung.

Das Folgende ist ein Ansatz. In diesem Beispiel wird die Broadcast-Variable zum Speichern eines Caches verwendet.

Object Cache { 

private var cache:Broadcast; 

// This method must be called by client to initialize the cache 
def init(sc:SparkContext) = { 
    cache = sc.broadcast(loadCache) 
} 

def getCache() = { 
    // check that variable is initialized 
    if cache!=null { 
    Some(cache) 
    } 
    else 
    { 
    None 
    } 
} 

private def loadCache():List[String] = { 
    // load data from DB 
} 

} 
Verwandte Themen