val ssc: StreamingContext = new StreamingContext(conf,Seconds(5)) // //batchdurat
xxx.window(Minutes(60),Seconds(10)) // windowduration slideduration默认=batchduration
要理解spark-streaming 窗口要理解上面的三个时间单位
second(5)是指spark将流式数据划分为几秒一个批次,我这里是5s
minutes(60)是指开窗的长度是60min,其中这个窗口的开始点是你程序开始运行或者说spark接收到数据那一秒开始算
seconds(10)是指滑动步长
主要说下batchduration windowduration
个人理解 如果batchduration=windowduration =60min 那么处理的数据是每个小时处理一个小时的数据
例如2:00处理1:00-2:00的数据,3:00的2:00-3:00的数据
当然这个是不现实的,因为spark-streaming处理的是实时数据按道理batchduration这个值越小就越接近实时,这个例子只是为了让你更好理解,
如果batchduration=windowduration =5s 那么窗口也只开了5s的窗口也不符合实际要求
最后解释下我上述代码的代表意义
每5秒处理一下流式数据(无延迟情况下)
1:00:00程序启动
1:00:05的时候处理了1:00:00-1:00:05的数据(聚合map filter),
1:00:10的时候处理了1:00:05-1:00:10的数据(聚合map filter),
然后把1:00:05和1:00:10两次处理的结果再计算
最后输出结果
然后过10s输出结果,直到2:00 输出1:00:00-2:00:00的结果,
但是2:00:00以后都只输出一个小时以内的计算结果