web-dev-qa-db-ja.com

Spark DStreamでの変換とマップの正確な違いは何ですか。

Spark DStream in Spark Streamingの変換を理解しようとしています。

マップと比較して非常に優れた変換を知っていましたが、変換とマップを区別できるリアルタイムの例または明確な例を教えてもらえますか?

11
Srini

Sparkストリーミングのtransform関数を使用すると、ストリームの基になるRDDsでApacheSparkの変換を使用できます。mapが使用されます要素から要素への変換の場合、transformを使用して実装できます。基本的に、mapDStreamの要素で機能します。transformで作業できます。 DStreamのRDDsを使用します。 http://spark.Apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams to役に立つ。

16
Holden

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との和集合演算を実行します。

4
Remis Haroon

すべてのバッチ間隔は異なるRDDであるため、DStreamにはいくつかのRDDがあります。
したがって、transform()を使用すると、DStream全体にRDD操作を適用する機会が得られます。

Sparkドキュメント: http://spark.Apache.org/docs/latest/streaming-programming-guide.html#transform-operation からの例

1
uris

Spark Streamingの変換関数を使用すると、Stream内の基になるRDDに対して任意の変換を実行できます。たとえば、Transformを使用してストリーミングで2つのRDDを結合できます。ここで、1つのRDDはテキストファイルから作成されたRDDまたは並列化されたRDDになります。コレクションおよびその他のRDDは、テキストファイル/ソケットなどのストリームから取得されます。

Mapは、特定のバッチのRDDの各要素で機能し、Mapに渡された関数を適用した後にRDDになります。

1
rahul gulati

0-1秒の「HelloHow」と次の1-2秒の「AreYou」のデータがある場合。次に、上記のようにmap and reduce by keyの例の場合、最初のバッチの出力(hello、1)と(How、1)、次のバッチの出力(are、1)と(you、1)が生成されます。同様に、「変換関数」を使用する次の例では、出力の違いは何ですか

0
Anu

例1)

待ち行列に入っている男性が部屋に入ってきて、ドレスを着替えてから、好きな女性と結婚します。

1)ドレスの変更はマップ操作です(属性で自分自身を変換します)

2)結婚する女性はあ​​なたのマージ/フィルター操作ですが、他の人の影響下にあり、実際の変換操作と呼ぶことができます。

例2)学生が大学に入学し、2回の講義に出席した人は少なく、4人に出席した人はほとんどいませんでした。

1)講義に参加するのは地図の操作であり、通常は学生が行っています。

2)しかし、講師が彼らに何を教えたかを特定することは、講師のRDDデータ、彼の日の議題に依存します。

変換操作が、適切なデータを識別するためにフィルタリングまたは検証するディメンションまたは静的テーブルであると想定します。削除はジャンクである可能性があります。

0
dalwinder singh