2016-08-31 4 views
0

sparkストリーミングアプリケーションで作業しています。私は特定の条件を確認する必要があるという要件を持っています(ローカルFSに存在するファイルを読むことによって)。 私がやってみました:Spark:各エグゼキュータでrddを処理する前にカスタムメソッドを呼び出してください。

lines.foreachRDD{rdd => 
verifyCondition 
rdd.map() .. 

} 



def verifyCondition(){ 
... 
} 

をしかしverifyConditionはドライバによって実行されています。各エグゼクティブが実行できる方法はありますか?

おかげ

+0

'lines' RDDの要素ごとに1回条件を確認しますか?または、エグゼキュータで実行されていることを確認したいだけですか? –

+0

すべてのエグゼキュータとドライバに関するデータのバッチごとに1回実行するようにします – Alok

答えて

0

内部のマップは、環境と一緒に機能を格納したレコード閉鎖(閉鎖されているので、あなたは

rdd.map{ 
    verifyCondition 
    ... 
} 

のような)(rdd.map内verifyCondition機能を移動することができます)、sparkはエグゼキュータ上でそれを配布し、各エグゼキュータによって実行されます。

+0

これはドライバとエグゼキュータの両方で実行されるのでしょうか? – Alok

+0

実行者のみ。 – linbojin

+0

ドライバで実行させる場合、rdd.map()の前に別のverifyConditionを呼び出すことができます。 – linbojin

0
lines.foreachRDD { rdd => 
    rdd.foreachPartition => partition 
    verifyCondition(...) // This will be executed by executors, once per every partition 
    partition.map(...) 
    } 
} 
関連する問題