火花流DStream映射与foreachRDD相比,转换效率更高

时间:2018-08-18 03:36:09

标签: apache-spark streaming dstream

仅进行转换,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))

哪个转换效率更高?

1 个答案:

答案 0 :(得分:0)

如果检查类型,则可以自己回答此问题。 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))

就执行而言是相同的,因此使用后者(后者不必要地冗长)没有意义。