SparkStreaming中的foreachRDD、spark-core中foreach、spark-core中foreachPartition三者之间的区别

  • SparkStreaming中foreachRDD算子解析:

SparkStreaming是流式实时处理数据,就是将数据流按照定义的时间进行分割(就是“批处理”)。每一个时间段内处理的都是一个RDD。而SparkStreaming中的foreachRDD方法就是在处理每一个时间段内的RDD数据。

(官方文档”http://spark.apachecn.org”中的解释)

DStream中即使有foreachRDD算子也不会即使进行处理,只有foreach(func)函数func中存在了action算子才会执行运算,所以foreachRDD的函数中可以使用foreach和foreachPartition算子来触发action操作。

foreachRDD算子源码中的注释是:Apply a function to each RDD in this DStream. This is an output operator, so  'this' DStream will be registered as an output stream and therefore materialized.

(将函数应用于此DStream中的每个RDD。 这是一个输出操作符,所以 'this'DStream将被注册为输出流,因此具体化。)

  • Spark-core中的foreachPartition算子解析

 

foreachPartition是action算子,该算子源码中的注释是:Applies a function f to each partition of this RDD.(将函数f应用于此RDD的每个分区)

foreachPartition是对每个partition中的iterator时行迭代的处理.通过用户传入的function(即函数f)对iterator进行内容的处理,源码中函数f传入的参数是一个迭代器,也就是说在foreachPartiton中函数处理的是分区迭代器,而非具体的数据。

 

.Spark-core中的foreach算子解析:

与foreachPartition类似的是,foreach也是对每个partition中的iterator时行迭代处理,通过用户传入的function(即函数f)对iterator进行内容的处理。而不同的是,函数f中的参数传入的不再是一个迭代器,而是每次的foreach得到的一个rdd的kv实例,也就是具体的数据。

Foreach也是一个actor算子,源码中的注释是:Applies a function f to all elements of this RDD.(将函数f应用于此RDD的所有元素)

(官方文档”http://spark.apachecn.org”中的解释)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值