3

スライディング ウィンドウで DStream バッチでキャプチャされたすべての RDD の結合に部分関数を渡そうとしています。1 秒のバッチに離散化されたストリームで 10 秒以上のウィンドウ操作を構築するとします。

val ssc = new StreamingContext(new SparkConf(), Seconds(1))
val stream = ssc.socketStream(...)
val window = stream.window(Seconds(10))

windowはK個のRDDを持っています。collect(f: PartialFunction[T, U])これらの RDD のすべての K の和集合で使用したいと思います。++を使用してユニオン演算子を呼び出すこともできますが、 not aを返し、副作用を回避foreachRDDしたいと考えています。RDDUnit

私が探しているのは、次のようなリデューサーです

def reduce(f: (RDD[T], RDD[T]) ⇒ RDD[T]): RDD[T]

次のDStreamように使用できます。

window.reduce(_ ++ _).transform(_.collect(myPartialFunc))

ただし、これは Spark Streaming API では利用できません。

部分関数を渡すことができるように、ストリームでキャプチャされた RDD を単一の RDD に結合するための良いアイデアはありますか? または、独自のRDDレデューサーを実装するためですか? おそらく、この機能は後続の Spark リリースで提供されるのでしょうか?

4

1 に答える 1

2

部分関数は DStream 操作で直接サポートされていませんが、同じ機能を実現することは難しくありません。

たとえば、String を受け取り、数値の場合は String の Int を生成する簡単な部分関数を考えてみましょう。

val pf:PartialFunction[String,Int] = {case x if (Try(x.toInt).isSuccess) => x.toInt}

そして、文字列の dstream があります:

val stringDStream:DStream[String] = ??? // use your stream source here

次に、次のように部分関数を DStream に適用できます。

val intDStream = stringDStream.filter(x => pf.isDefinedAt(x)).map(pf)
于 2014-11-08T11:22:05.730 に答える