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")
}