spark streaming DStream map vs 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,但是 map seams 会先将 DStream 转换为 RDD(不确定),因此 foreachRDD seams 比 map 更有效。但是,map 是一个转换操作,而 foreachRDD 是一个输出操作。因此,map 在进行转换时应该比 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))
在执行方面是相同的,所以使用后者没有意义,后者不必要地冗长。
map和foreachRDD只是为了改造,可以达到同样的目的,但是哪个更高效呢?为什么?
例如,对于 DStream[Int]:
val newDs1=Ds.map(x=> x+1)
val newDs2=Ds.foreachRDD (rdd=>rdd.map(x=> x+1))
我知道 foreachRDD 会直接操作 RDD,但是 map seams 会先将 DStream 转换为 RDD(不确定),因此 foreachRDD seams 比 map 更有效。但是,map 是一个转换操作,而 foreachRDD 是一个输出操作。因此,map 在进行转换时应该比 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))
在执行方面是相同的,所以使用后者没有意义,后者不必要地冗长。