Spark Streaming------window算子

一、window简介

Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会作为window DStream的一个RDD。(每个滑动窗口操作,都应该指定两个参数,窗口长度以及滑动间隔)

二、案例

package com.sparkstreaming

import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext}

object _05WindowOperationDemo {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("WindowOperation")
      .setMaster("local[*]")
    val ssc = new StreamingContext(conf, Seconds(10))
    //需要提前在Linux上使用nc -lp 10086开启服务器
    val dStream: ReceiverInputDStream[String] = ssc.socketTextStream("192.168.101", 10086)
    val mapDStream: DStream[(String, Int)] = dStream.flatMap(_.split(" ")).map((_, 1))
    /**
     * window(
     *  windowDuration:Duration,    //第一个参数:用于指定窗口的大小,即长度,必须是micro-batch处理时的时间整数倍
     *  slideDuration:Duration      //第二个参数:用于指定窗口滑动的周期,必须是micro-batch处理时的时间整数倍
     *  )
     *
     *  数据的情况:
     *        1. 刚启动时,窗口里一定没有数据,如果上游没有数据的时间超过窗口的长度时,窗口也没有数据
     *        2. 启动程序不久,窗口的数据的变化应该是由少变多
     *        3. 在处理数据过程中,窗口的数据可能会由多变少,甚至没有
     */
    val windowDStream: DStream[(String, Int)] = mapDStream.window(Seconds(30), Seconds(10))
    val resultDStream: DStream[(String, Int)] = windowDStream.reduceByKey(_ + _)
    resultDStream.print()
    ssc.start()
    ssc.awaitTermination()
  }
}

上一篇:Mac vim iterm2配色方案


下一篇:spark streaming 1