spark使用window来统计近几分钟数据情况

package com.xyf
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}


object sparkStreamingTest {
  def main(args: Array[String]){

    val conf = new SparkConf() //创建SparkConf对象
    conf.setAppName("sparkStreamingTest") //设置应用程序的名称,在程序运行的监控界面可以看到名称
    conf.setMaster("local[3]") //此时,程序在Spark集群

    /*
    * 此处设置 Batch Interval 实在spark Streaming 中生成基本Job的单位,窗口和滑动时间间隔
    * 一定是该batch Interval的整数倍*/
    val ssc = new StreamingContext(conf, Seconds(5))

    val hottestStream = ssc.socketTextStream("192.168.0.100", 9999)



    val searchPair = hottestStream.flatMap(line => line.split(",")).map(item => (item , 1))
    //reducefunction计算每个rdd的和,60s是窗口,20是滑动步长
    val hottestDStream = searchPair.reduceByKeyAndWindow((v1:Int,v2:Int) => v1 + v2, Seconds(60) ,Seconds(20))

    hottestDStream.transform(hottestItemRDD => {
      //将pair._2,pair._1反过来,通过数字来排序,然后反转,最终获取前三个打印
      val top3 =  hottestItemRDD.map(pair => (pair._2,pair._1) ).sortByKey(false).
        map(pair => (pair._2,pair._1)).take(3)

      for(item <- top3){
        println(item)
      }
      hottestItemRDD
    }).print()
    ssc.start()
    ssc.awaitTermination()

  }
}

windows环境0:

java  scala nc.exe

首先需要开启端口监听

D:\> nc -L -p 9999 -v
正在监听[任何一个(多个)] 9999 ...
连接到 [192.168.0.100] 来自 PC-20161208TLXD [192.168.0.100] 5681
113,edf
112,3fr
12f,ghj
46t,fhgd
qwe,fg

然后启动代码.

其中涉及到window长度、滑动步长和batch长度。window长度决定计算的批次数,滑动步长决定window相隔多长时间计算一次。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值