学习致谢

​https://www.bilibili.com/video/BV1Xz4y1m7cv?p=45​

需求

使用窗口计算模拟热搜排行榜:每隔10s计算最近20s的热搜排行榜!

·注意:

DStream没有直接排序的方法!所以应该调用transform方法对DStream底层的RD进行操作,调用RDD的排序方法!

transform(函数),该函数会作用到Dstream底层的RDD上!

Spark综合学习笔记(十一)SparkStreaming案例5 topN_spark

代码实现

package streaming

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

/**
* Author itcast
* DESC 使用窗口计算:每隔5s(滑动间隔)计算最近10s(窗口长度)的数据
* 模拟百度热搜排行榜,每隔10s计算最近20s的热搜词
*/
object WordCount05 {
def main(args: Array[String]): Unit = {
//TODO 0.准备环境
val conf:SparkConf=new SparkConf().setMaster("spark").setMaster("local[*]")
val sc: SparkContext=new SparkContext(conf)
sc.setLogLevel("WARN")
//the time interval at which streaming data will be dicided into batches
val ssc:StreamingContext= new StreamingContext(sc,Seconds(5))
//TODO 1.加载数据
val lines:ReceiverInputDStream[String]=ssc.socketTextStream("node1",9999)
//TODO 2.处理数据
val resuleDS:DStream[(String,Int)]=lines.flatMap(_.split(" "))
.map((_,1))
// 模拟百度热搜排行榜,每隔10s计算最近20s的热搜词
// xindowDuration:窗口长度/窗口大小,表示要计算最近多长时间的数据
// slideDuration:滑动间隔,表示每隔多长时间计算一次
.reduceByKeyAndWindow((a:Int,b:Int)=>a+b,Seconds(20),Seconds(10))
//注意DStream没有提供直接排序的方法,所以需要直接对底层的RDD进行操作
//DStream的transform方法表示对DStream底层的RDD进行操作并返回结果
val sortResult:DStream[(String, Int)]=resuleDS.transform(rdd=>{
val sortRDD:RDD[(String,Int)]=rdd.sortBy(_._2,false)
val top3:Array[(String,Int)]=sortRDD.take(3)
println("======top3======")
top3.foreach(println)
println("======top3======")
sortRDD
})
sortResult

//TODO 3.输出结果
resuleDS.print()
//TODO 4.启动并等待结束
ssc.start()
ssc.awaitTermination()//注意:流式应用程序启动之后需要一直运行等待停止、等待到来
//TODO 5.关闭资源
ssc.stop(stopSparkContext = true,stopGracefully = true)//优雅关闭

/**微博热搜
一组数字速读六中全会精神 一组数字速读六中全会精神 一组数字速读六中全会精神 一组数字速读六中全会精神 一组数字速读六中全会精神
怀孕老师晕倒学生飞奔相救 怀孕老师晕倒学生飞奔相救 怀孕老师晕倒学生飞奔相救
肯德基回应驱逐要水要纸巾男子 肯德基回应驱逐要水要纸巾男子
把中国命运牢牢掌握在自己手中
宝宝洗护研究所
初恋这件小事原型结局是be
陶虹退出张庭夫妇传媒公司股东
十年前QQ空间动态有多羞耻
当微博遇见LPL 当微博遇见LPL
被易烊千玺抱着的小女孩长大了
*/
}
}

演示:

(1)** 输入自己调整的热搜词

Spark综合学习笔记(十一)SparkStreaming案例5 topN_apache_02


查看统计结果

Spark综合学习笔记(十一)SparkStreaming案例5 topN_hadoop_03


(2) 清空后,多发几条

Spark综合学习笔记(十一)SparkStreaming案例5 topN_apache_04


查看结果

Spark综合学习笔记(十一)SparkStreaming案例5 topN_hadoop_05