object SparkStreamingTCPWindowHotWords {
def main(args: Array[String]): Unit = {
//配置sparkConf参数
val sparkConf = new SparkConf().setAppName("SparkStreamingTCPWindowHotWords").setMaster("local[2]")
//构建sparkContext对象
val sc = new SparkContext(sparkConf)
sc.setLogLevel("WARN")
//构建StreamingContext对象,每个批处理的时间间隔
//设置批处理的时间,也就是多久计算一次
val scc = new StreamingContext(sc,Seconds(5))
//注册一个监听的IP地址和端口 用来收集数据
val lines = scc.socketTextStream("hadoop-senior.test.com",9999)
//切分每一行记录
val words = lines.flatMap(_.split(" "))
//每个单词记为1
val wordAndOne = words.map((_,1))
//reduceByKeyAndWindow函数参数意义:
// windowDuration:表示window框住的时间长度,如本例5秒切分一次RDD,框10秒,就会保留最近2次切分的RDD
//slideDuration: 表示window滑动的时间长度,即每隔多久执行本计算
val result = wordAndOne.reduceByKeyAndWindow((a:Int,b:Int)=>a+b,Seconds(5),Seconds(5))
val data=result.transform(rdd=>{
//降序处理后,取前3位
val dataRDD = rdd.sortBy(t=>t._2,false)
val sortResult = dataRDD.take(3)
println("--------------print top 3 begin--------------")
sortResult.foreach(println)
println("--------------print top 3 end--------------")
dataRDD
})
data.print()
scc.start()
scc.awaitTermination()
}
}