Spark DStream in Spark Streamingの変換を理解しようとしています。
マップと比較して非常に優れた変換を知っていましたが、変換とマップを区別できるリアルタイムの例または明確な例を教えてもらえますか?
Sparkストリーミングのtransform
関数を使用すると、ストリームの基になるRDDs
でApacheSparkの変換を使用できます。map
が使用されます要素から要素への変換の場合、transform
を使用して実装できます。基本的に、map
はDStream
の要素で機能します。transform
で作業できます。 DStreamのRDDs
を使用します。 http://spark.Apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams to役に立つ。
map
は基本変換であり、transform
はRDD変換です
map(func):ソースDStreamの各要素を関数funcに渡すことにより、新しいDStreamを返します。
これは、DStreamでのマップ操作と変換操作の両方を示す例です。
val conf = new SparkConf().setMaster("local[*]").setAppName("StreamingTransformExample")
val ssc = new StreamingContext(conf, Seconds(5))
val rdd1 = ssc.sparkContext.parallelize(Array(1,2,3))
val rdd2 = ssc.sparkContext.parallelize(Array(4,5,6))
val rddQueue = new Queue[RDD[Int]]
rddQueue.enqueue(rdd1)
rddQueue.enqueue(rdd2)
val numsDStream = ssc.queueStream(rddQueue, true)
val plusOneDStream = numsDStream.map(x => x+1)
plusOneDStream.print()
map
操作は、DStream内のすべてのRDDの各要素に1を追加し、以下に示すような出力を提供します。
-------------------------------------------
Time: 1501135220000 ms
-------------------------------------------
2
3
4
-------------------------------------------
Time: 1501135225000 ms
-------------------------------------------
5
6
7
-------------------------------------------
transform(func):ソースDStreamのすべてのRDDにRDD-to-RDD関数を適用して、新しいDStreamを返します。これは、DStreamで任意のRDD操作を実行するために使用できます。
val commonRdd = ssc.sparkContext.parallelize(Array(0))
val combinedDStream = numsDStream.transform(rdd=>(rdd.union(commonRdd)))
combinedDStream.print()
transformを使用すると、DStream内のRDDに対して結合、結合などのRDD操作を実行できます。ここに示すサンプルコードは、次のような出力を生成します。
-------------------------------------------
Time: 1501135490000 ms
-------------------------------------------
1
2
3
0
-------------------------------------------
Time: 1501135495000 ms
-------------------------------------------
4
5
6
0
-------------------------------------------
Time: 1501135500000 ms
-------------------------------------------
0
-------------------------------------------
Time: 1501135505000 ms
-------------------------------------------
0
-------------------------------------------
ここで、要素0
を含むcommonRdd
は、DStream内の基礎となるすべてのRDDとの和集合演算を実行します。
すべてのバッチ間隔は異なるRDDであるため、DStreamにはいくつかのRDDがあります。
したがって、transform()を使用すると、DStream全体にRDD操作を適用する機会が得られます。
Sparkドキュメント: http://spark.Apache.org/docs/latest/streaming-programming-guide.html#transform-operation からの例
Spark Streamingの変換関数を使用すると、Stream内の基になるRDDに対して任意の変換を実行できます。たとえば、Transformを使用してストリーミングで2つのRDDを結合できます。ここで、1つのRDDはテキストファイルから作成されたRDDまたは並列化されたRDDになります。コレクションおよびその他のRDDは、テキストファイル/ソケットなどのストリームから取得されます。
Mapは、特定のバッチのRDDの各要素で機能し、Mapに渡された関数を適用した後にRDDになります。
0-1秒の「HelloHow」と次の1-2秒の「AreYou」のデータがある場合。次に、上記のようにmap and reduce by keyの例の場合、最初のバッチの出力(hello、1)と(How、1)、次のバッチの出力(are、1)と(you、1)が生成されます。同様に、「変換関数」を使用する次の例では、出力の違いは何ですか
例1)
待ち行列に入っている男性が部屋に入ってきて、ドレスを着替えてから、好きな女性と結婚します。
1)ドレスの変更はマップ操作です(属性で自分自身を変換します)
2)結婚する女性はあなたのマージ/フィルター操作ですが、他の人の影響下にあり、実際の変換操作と呼ぶことができます。
例2)学生が大学に入学し、2回の講義に出席した人は少なく、4人に出席した人はほとんどいませんでした。
1)講義に参加するのは地図の操作であり、通常は学生が行っています。
2)しかし、講師が彼らに何を教えたかを特定することは、講師のRDDデータ、彼の日の議題に依存します。
変換操作が、適切なデータを識別するためにフィルタリングまたは検証するディメンションまたは静的テーブルであると想定します。削除はジャンクである可能性があります。