spark streaming 里的transform 与foreachRDD

原创
2017/03/30 16:14
阅读数 362

spark streaming 里的transform 转换函数里是不能有关于rdd的action操作,有也不会执行,只能使用普通算子,也不能有任何的输出操作,不会执行。

foreachRDD 里可以有关于rdd的action操作,也可以有其他算子操作。

另外ssc.sparkContext 这个是不是序列化的,如果执行了ssc.checkpoint

则该语句会报错AccumulatorBorder.getAccumulator(ssc.sparkContext)

所以如果sparkContext 最好不要作为函数参数传来传去,如果非要传输可以使用当前算子的sparkContext

         dcorrect.count().foreachRDD{ x=>  x.partitions
                                       AccumulatorBorder.getAccumulator(x.sparkContext).add(x.collect()(0))
                                       print(AccumulatorBorder.getAccumulator(x.sparkContext).value+"=getAccumulator foreachRDD")
                                     }
         

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部