簡體   English   中英

DStream中Spark變換與地圖之間的確切區別是什么?

[英]what is exact difference between Spark Transform in DStream and map.?

我試圖了解Spark Streaming中Spark DStream的轉換。

我知道與地圖相比,變換的位置非常高,但有些人可以給我一些實時的例子或明確的例子,可以區分變換和地圖。

Spark流中的transform功能允許人們在流的底層RDDs上使用任何Apache Spark的轉換。 map用於元素到元素的轉換,可以使用transform實現。 本質上, map適用於DStream的元素, transform允許您使用RDDs的RDD。 您可能會發現http://spark.apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams非常有用。

map是一個基本的轉換, transform是一個RDD轉換

地圖


map(func):通過函數func傳遞源DStream的每個元素來返回一個新的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):通過將RDD-to-RDD函數應用於源DStream的每個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操作,如join,union等,這里給出的示例代碼將生成如下輸出

-------------------------------------------
Time: 1501135490000 ms
-------------------------------------------
1
2
3
0

-------------------------------------------
Time: 1501135495000 ms
-------------------------------------------
4
5
6
0

-------------------------------------------
Time: 1501135500000 ms
-------------------------------------------
0

-------------------------------------------
Time: 1501135505000 ms
-------------------------------------------
0
-------------------------------------------

這里commonRdd含有元素0執行與DSTREAM內所有底層RDDS聯合操作。

DStream有幾個RDD,因為每個批處理間隔是不同的RDD。
因此,通過使用transform(),您可以在整個DStream上應用RDD操作。

Spark Docs的示例: http//spark.apache.org/docs/latest/streaming-programming-guide.html#transform-operation

Spark Streaming中的轉換功能允許您對Stream中的基礎RDD執行任何轉換。 例如,您可以使用Transform在流中加入兩個RDD,其中一個RDD是由文本文件或並行化集合構成的RDD,而其他RDD來自文本文件/套接字等。

Map適用於特定批處理中RDD的每個元素,並在應用傳遞給Map的函數后生成RDD。

例1)

排隊進入房間的男人,換衣服,然后嫁給自己選擇的女人。

1)改變着裝是地圖操作(他們在屬性中改變自己)

2)嫁給女人是合並/過濾操作,但在其他人的影響下,我們可以稱之為真正的轉換操作。

例2)學生進入大學,很少參加2個講座,很少有人參加4個,所以。

1)參加講座的是地圖操作,通常是學生正在做的事情。

2)但要確定講師教他們什么取決於講師RDD數據,他的日程。

假設轉換操作要過濾或驗證的維或靜態表,以便為您識別正確的數據,並且刪除可能是垃圾。

如果我的數據來自0-1秒的“Hello How”以及接下來的1-2秒“Are You”。 然后在map和reduce的情況下,如上所示通過鍵示例生成第一批的輸出(hello,1)和(How,1)和下一批的(是,1)和(你,1)。但是類似地,對於使用“變換函數”的下一個示例,輸出的差異將是什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM