前一篇学习演示了 spark streaming 的基础运用。下一步进入稍微难一点的,利用 checkpoint 来保留上一个窗口的状态,这样可以做到移动窗口的更新统计。首先还是先演示一下 spark 里传回调函数的用法,上一篇里用 DStream 处理模拟了SUM(),这个纯加法是最简单的了,那么如果AVG()怎么做呢?valr=logs.filter(l=>l.path.equals("/var/log/system.log")).filter(l=>l.lineno>70)r.map(l=>l.message->(l.lineno,1)).reduceByKey((a,b)=>{(a._1+b._1,a._2+b._2)}).map(t=>AlertMsg(t._1,t._2._2,t._2._1/t._2._2)).print()这段跟之前做 SUM 的那段的区别:DStream 处理成 PairDStream 的时候,Value 不是单纯的 1,而是一个 Seq[Double, Int]。避免了上一个示例里分开两个 DStream 然后再 join 起来的操作;给reduceByKey传了一个稍微复杂的匿名函数。在这一个函数里计算了 SUM 和 COUNT,后面 map 只需要做一下除法就是 AVG 了。不过这里还用不上上一次窗口的状态。真正需要上一次窗口状态的,是red
...
继续阅读
(130)