0

只是为了变换,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 是一个转换操作,而 foreachRDD 是一个输出操作。因此,在进行转换时,map 应该比 foreachRDD 更有效。有谁知道哪一个是对的,为什么?感谢您的回复。

再添加一个对比:

val newDS3=Ds.transform (rdd=>rdd.map(x=> x+1))

哪个对转型更有效?

4

1 回答 1

0

如果您检查类型,您可以自己回答这个问题。你所拥有的是foreachRDDUnit

 val newDs2: Unit = Ds.foreachRDD (rdd=>rdd.map(x=> x+1))

您不仅没有DStream[_],而且 internalmap永远不会执行(它很懒惰)。

下面两个:

Ds.map(x=> x+1)
Ds.transform (rdd=>rdd.map(x=> x+1))

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

于 2018-08-18T10:49:47.713 回答