2016-11-22 8 views
4

次のコードでは、Spark Web UIのステージセクションにあるように、関数fn1 & fn2がinRDDに順次適用されるようです。Spark DStreamのforeachDD関数でのRDDでの同時変換

DstreamRDD1.foreachRDD(new VoidFunction<JavaRDD<String>>() 
{ 
    public void call(JavaRDD<String> inRDD) 
     { 
      inRDD.foreach(fn1) 
      inRDD.foreach(fn2) 
     } 
} 

このようにストリーミングジョブを実行すると、どのようになりますか。以下の機能は入力Dstreamで並列に実行されますか?彼らはグラフのマテリアを引き起こす意味、出力変換あるのでDStreamRDDforeachRDD

DStreamRDD1.foreachRDD(fn1) 
DStreamRDD2.foreachRDD(fn2) 
+0

は両方とも順呼出しであり、その並行処理は行われません。 – Shankar

答えて

2

どちらforeachが順次実行されます。これは、実行グラフが複数の別々の段階に分岐するときに並列に実行できるSparkの一般的な遅延変換の場合には当てはまりません。例えば

dStream: DStream[String] = ??? 
val first = dStream.filter(x => x.contains("h")) 
val second = dStream.filter(x => !x.contains("h")) 

first.print() 
second.print() 

あなたが並列に根本的な段階を実行するのに十分なクラスタリソースを持っているとき、最初の部分を順次実行する必要はありません。その後、countを呼び出すと出力変換であり、printステートメントが次々に印刷されます。

関連する問題