sparkstreaming--window把多个批次中RDD合并成一个RDD

本文详细探讨了Spark Streaming中的Window操作,它如何将来自不同批次的RDD组合成一个单一的处理单元,以实现连续数据流的滚动聚合等功能。通过Window,开发者能够有效地处理时间序列数据并进行实时分析。
object WordCountWindows {
  def main(args: Array[String]): Unit = {

    System.setProperty("hadoop.home.dir", "E:\\software\\bigdate\\hadoop-2.6.0-cdh5.15.0\\hadoop-2.6.0-cdh5.15.0")
    val conf=    new SparkConf();
    //spark配置
    //指明运行方式 local本地,local[2]开启2个线程
    conf.setMaster("local[2]")//一个线程用于读数据,一个用于处理数据
    conf.setAppName("WordCountStreaming")//在yarn资源管理器监控
    val sc= new SparkContext(conf);
    //StreamingContext 是SparkStreaming驱动
    val batch=5
    val streamingContext= new StreamingContext(sc,Seconds(batch))

    //确定输入源
    //单纯统计  输入源 监听网络端口
    val sourceDS= streamingContext.socketTextStream("wangfutai",7777)
    //streamingContext.checkpoint("hdfs://wangfutai:9000//home//wangfutai//a//sparkcheck")
    streamingContext.checkpoint("E:\\sparkdata")

    //单词统计
    //sourceDS支持绝大多数的算子
    //注意:每个batch,只处理当前时间RDD
    sourceDS.
      flatMap(
        line=>{
          line.split(" ")
        }
      ).map((_,1))
      // reduceFunc: (V, V) => V,  高阶函数
      //      windowDuration: Duration,窗口大小
      //      slideDuration: Duration,滑动步长
      .reduceByKeyAndWindow(
      (v1:Int,v2:Int)=>{
        v1+v2
      },
      Seconds(12*batch),//窗口大小 1分钟,等超过一分钟的数据就会舍去
      Seconds(4*batch)//步长20秒,每20秒计算
    )
      .print()
   /*
    测试数据:每隔20秒输入一次,当超过1分钟时,即第四次输入后,计算结果会舍去第一次的数据
    aaa aa ddd rrr
    aaa eee
    aaa uuu
    rrr

    结果:-------------------------------------------
    Time: 1551680930000 ms
      -------------------------------------------
    (aa,1)
    (ddd,1)
    (rrr,1)
    (aaa,1)

    WARN - Block input-0-1551680941000 replicated to only 0 peer(s) instead of 1 peers
      -------------------------------------------
    Time: 1551680950000 ms
      -------------------------------------------
    (aa,1)
    (ddd,1)
    (rrr,1)
    (eee,1)
    (aaa,2)

    WARN - Block input-0-1551680957200 replicated to only 0 peer(s) instead of 1 peers
      -------------------------------------------
    Time: 1551680970000 ms
      -------------------------------------------
    (aa,1)
    (ddd,1)
    (rrr,1)
    (eee,1)
    (aaa,3)
    (uuu,1)

    WARN - Block input-0-1551680986000 replicated to only 0 peer(s) instead of 1 peers
      -------------------------------------------
    Time: 1551680990000 ms
      -------------------------------------------
    ,1)
    (rrr,1)
    (eee,1)
    (aaa,2)
    (uuu,1)*/
    //开启spark streaming任务
    streamingContext.start()
    //需要等待任务执行
    //当调用这个函数,整个任务会在后台不停运行
    streamingContext.awaitTermination()
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值