如何保存对广播变量的引用

时间:2016-03-31 14:18:51

标签: apache-spark

在scala应用程序中,哪里是存储Spark broadcast变量的最佳位置,以便可以在应用程序的其他位置引用它?

val broadcast:Broadcast = ...

似乎无法将其保存在Object中,因为:

  • 一个对象不能有一个未初始化的变量,所以它不能 通过调用对象上的方法来设置引用,从而传递对广播变量的引用。
  • 对象无法设置广播变量 本身,因为一个对象没有构造函数可以传递给它 参考SparkContext。

谢谢

1 个答案:

答案 0 :(得分:0)

使用var而不是val可能是解决方案。

以下是一种方法。在该示例中,广播变量用于保存缓存。

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
 }

}