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に渡された関数コードと一緒に存在する)
ありがとうございました
ありがとうございました。一歩前進:LogicEngineが使用する内部の静的参照リストがある場合、おそらくそれがコードと共にノードに渡されます。しかし、LogicEngineがrddが処理されるにつれて大きくなる動的リストを使用するとどうなるでしょう。各ノードは、最初にrddに渡されたときの状態でしかキャッシュを表示しませんか? – user1052610
https://spark.apache.org/docs/latest/programming-guide.html#shared-variablesを参照してください。 –
グローバル変数(この場合はキャッシュ)を実装するには、自分の理解が正しいことを明確にするだけです。ノード全体で動的に更新され、すべてのノードで共有されるため、アキュムレータを使用する必要があります。 – user1052610