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))

哪个转化效率更高?

如果你检查了类型,你可以自己回答这个问题。 foreachRDDUnit 所以你有:

 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))

在执行方面是相同的,所以使用后者没有意义,后者不必要地冗长。