美文网首页数客联盟
对DStream.foreachRDD的理解

对DStream.foreachRDD的理解

作者: Woople | 来源:发表于2017-01-09 16:18 被阅读0次

foreachRDD(func)的官方解释为

The most generic output operator that applies a function, func, to each RDD generated from the stream. This function should push the data in each RDD to an external system, such as saving the RDD to files, or writing it over the network to a database. Note that the function func is executed in the driver process running the streaming application, and will usually have RDD actions in it that will force the computation of the streaming RDDs.

对于这个定义会产生一个疑问:在一个batch interval里面会产生几个RDD?
结论:有且只有一个

那么定义里面所说的“each RDD”应该如何理解呢?

DStream可以理解为是基于时间的,即每个interval产生一个RDD,所以如果以时间为轴,每隔一段时间就会产生一个RDD,那么定义中的“each RDD”应该理解为每个interval的RDD,而不是一个interval中的每个RDD

从spark的源码分析

DStream中的foreachRDD方法最终会调用如下的代码

private def foreachRDD(
    foreachFunc: (RDD[T], Time) => Unit,
    displayInnerRDDOps: Boolean): Unit = {
  new ForEachDStream(this,
    context.sparkContext.clean(foreachFunc, false), displayInnerRDDOps).register()
}

可以看到这个方法里面并没有任何的Iterator,可以对比一下RDD中的foreachPartitionforeach方法,这两个方法是会遍历RDD,所以才会有Iterator类型的引用

def foreach(f: T => Unit): Unit = withScope {
  val cleanF = sc.clean(f)
  sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF))
}

def foreachPartition(f: Iterator[T] => Unit): Unit = withScope {
  val cleanF = sc.clean(f)
  sc.runJob(this, (iter: Iterator[T]) => cleanF(iter))
}

而如果每个interval中有多个RDD,那么DStream中的foreachRDD也一定会有Iterator类型的引用,但是从上述的代码中并没有。

相关文章

  • 如何高效的使用foreachRDD

    对于foreachRDD的正确理解,请参考对DStream.foreachRDD的理解在spark streami...

  • 对DStream.foreachRDD的理解

    foreachRDD(func)的官方解释为 The most generic output operator t...

  • 对理解的理解

    坚强的人不好做,再大的苦楚也不能说。 儿女情长为何愁,没有事业哪来的人生风流!任凭一路坎坷,也要一路高歌。...

  • 我对理解的理解

    时下,最值得珍惜的就是信任, 感恩别人对自己的一份信任,理解别人对自己的不理解,这就是我对理解的理解

  • 再谈对“理解”的理解

    再谈对“理解”的理解 1956年版《布卢姆目标分类学》里奖认知的维度分为:记忆、理解、分析、应用、评价和创造。 安...

  • 对“。。。。。。”的理解

    就在昨天,我瞬间被“。。。。。。”惹怒了,原因很简单,就是在30秒内,看见了连续3个“。。。。。。”,最后...

  • 对MQTT的理解

    MQTT定义了14种类型的控制消息;MQTT中只规定了整数数据采用大端字节序,所以要注意像【剩余长度(Remain...

  • 对母亲的理解

    挡风玻璃越来越模糊,不是因为下雨,而是泪水…… 母亲的话依然在耳边回荡,刺痛着我,作为一个母亲,她怎么...

  • 对奋斗的理解

    【什么是奋斗 】奋斗就是每一天都很难,可一年比一年容易。不奋斗就是每一天都很容易,可一年比一年越难。怕吃苦的人吃苦...

  • 对喜欢的理解

    我个人觉得,喜欢就是一种信仰,就是一种寄托,就是安全感,就是你有的我也有,就是我并不形单影只。其实,喜欢谁都是喜欢...

网友评论

    本文标题:对DStream.foreachRDD的理解

    本文链接:https://www.haomeiwen.com/subject/oxrhbttx.html