2016-03-31 8 views
0

スカラアプリケーションでは、Spark broadcast変数を格納するのに最適な場所ですので、アプリ内の別の場所で参照できるようになりますか?ブロードキャスト変数への参照を保持する方法

val broadcast:Broadcast = ... 
ので、 Objectでそれを保存することは可能ではないよう

  • は、オブジェクトが初期化されていない変数を持つことはできません、それは ことにより、放送変数への参照を渡すことはできませんので、参照を設定するオブジェクトのメソッドを呼び出します。
  • オブジェクトはブロードキャスト変数 自体を設定できません。オブジェクトには、 のSparkContextへの参照を渡すコンストラクタがありません。

varではなくval可能性の高いソリューションであるを使用してのおかげ

+0

とは何ですか? – eliasah

+0

Scalaアプリケーションのブロードキャスト変数への参照を保存することができます。これにより、アプリケーション内の別の場所にアクセスできるようになります(異なるクラスに属するrddに渡される関数)。いくつかのサンプルコードをお持ちの場合は、非常に感謝しています。 – user1052610

答えて

0

次のアプローチの1つです。この例では、ブロードキャスト変数はキャッシュを保持するために使用されています。

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 
} 

} 
関連する問題