![](/img/trans.png)
[英]Spark DStream.transform().foreachRDD() vs DStream.foreachRDD()
[英]spark streaming DStream map vs foreachRDD, which is more efficient for transformation
僅對於轉換,map和foreachRDD可以實現相同的目標,但是哪一個效率更高? 又為什么呢?
例如,對於DStream [Int]:
val newDs1=Ds.map(x=> x+1)
val newDs2=Ds.foreachRDD (rdd=>rdd.map(x=> x+1))
我知道foreachRDD將直接在RDD上運行,但是先通過地圖接縫將DStream轉換為RDD(不確定),因此foreachRDD接縫比map更有效。 但是,map是轉換操作,而foreachRDD是輸出操作。 因此,映射在進行轉換時應該比foreachRDD更有效。 誰知道哪個是對的,為什么? 感謝您的答復。
再添加一個比較:
val newDS3=Ds.transform (rdd=>rdd.map(x=> x+1))
哪種轉換效率更高?
如果檢查類型,則可以自己回答此問題。 foreachRDD
是Unit
因此您擁有的是:
val newDs2: Unit = Ds.foreachRDD (rdd=>rdd.map(x=> x+1))
您不僅沒有DStream[_]
,而且永遠不會執行內部map
(這是惰性的)。
以下兩個:
Ds.map(x=> x+1)
Ds.transform (rdd=>rdd.map(x=> x+1))
就執行而言,它們是相同的,因此使用后者(后者不必要冗長)沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.