仅进行转换,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))
哪个转换效率更高?
答案 0 :(得分:0)
如果检查类型,则可以自己回答此问题。 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))
就执行而言是相同的,因此使用后者(后者不必要地冗长)没有意义。