2016-04-03 5 views
0

スカラ関数はrdd.map()に渡されます。ロジックは複雑すぎて関数自体に含めることができず、ロジックはスカラーobjectにカプセル化されています。RDDに渡すパッケージクライアント側のコード

def func(s.String) = { 
    // LogicEngine is object which, given a string, returns a different string 
    LogicEngine.process(s) 
} 

val sc = new SparkContext(config) 

val rdd = sc.textFile(“…”) 

val rdd2 = rdd.map(func) 

質問はが上のノードに渡され、それ自体であるように、これを行うための正しい方法は何か、次のとおりです。次の例のように、オブジェクトは、スパークコンテキストをインスタンス化するアプリケーションの一部でありますrdd自体が処理されているので(クライアントに渡されるのではなく、rddに渡された関数コードと一緒に存在する)

ありがとうございました

答えて

1

これはあなたが既に持っているものです。各ノードは、最初にアクセスされたときにという独自のコピーをインスタンス化して使用します。

+0

ありがとうございました。一歩前進:LogicEngineが使用する内部の静的参照リストがある場合、おそらくそれがコードと共にノードに渡されます。しかし、LogicEngineがrddが処理されるにつれて大きくなる動的リストを使用するとどうなるでしょう。各ノードは、最初にrddに渡されたときの状態でしかキャッシュを表示しませんか? – user1052610

+0

https://spark.apache.org/docs/latest/programming-guide.html#shared-variablesを参照してください。 –

+0

グローバル変数(この場合はキャッシュ)を実装するには、自分の理解が正しいことを明確にするだけです。ノード全体で動的に更新され、すべてのノードで共有されるため、アキュムレータを使用する必要があります。 – user1052610

関連する問題