目录
天小天:(一)Spark Streaming 算子梳理 — 简单介绍streaming运行逻辑
天小天:(二)Spark Streaming 算子梳理 — flatMap和mapPartitions
天小天:(三)Spark Streaming 算子梳理 — transform算子
天小天:(四)Spark Streaming 算子梳理 — Kafka createDirectStream
天小天:(五)Spark Streaming 算子梳理 — foreachRDD
天小天:(六)Spark Streaming 算子梳理 — glom算子
天小天:(七)Spark Streaming 算子梳理 — repartition算子
天小天:(八)Spark Streaming 算子梳理 — window算子
前言
本节讲解window的作用,及底层如何实现
作用
window的作用正如其名字一样,就是计算一个窗口时间内的所有RDD。那么这个窗口如何生成的那?可以先看下图。
window算子有两个参数:windowDuration和slideDuration分别代表窗口时间和滑动时间。
以上图的为例,streaming的批次时间是2S,window的窗口时间为8S,滑动时间为4S。那么就是每四秒生成一个窗口,每个窗口取当前时间前8S所有批次的RDD。如果当前批次时间不是4S的倍数则此批次不执行任何操作。最终展现出来的窗口数据,就如图所示。
代码示例
一个window的算子使用方法如下代码示例:
package streaming
import org.apache.spark.{
SparkConf, rdd}
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.{
Seconds, StreamingContext}
import scala.collection.mutable
import scala.collection.mutable.ListBuffer
/**
* @date 2019/01/21
*/
object Api {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("api").setMaster("local[2]")
val rddQueue = new mutable.Queue[RDD[Int]]()
//批次时间为2S
val ssc = new StreamingContext(sparkConf, Seconds(2))
// consume from rddQueue
val lines = ssc.queueStream(rddQueue)
// window
// 第一个参数为window:8S
// 第二个参数为slide:4S(选填,默认为批次时间2S)
lines.window(Seconds(8),Seconds(4)).print()
ssc.start()
// produce to rddQueue