DStream操作实战:4.SparkStreaming开窗函数统计一定时间内的热门词汇

本文介绍如何使用 Spark Streaming 开发一个简单的热词统计应用。该应用通过接收 Socket 数据流,统计每 10 秒窗口内出现频率最高的三个词汇,并实时输出统计结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.testdemo.dstream.socket

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

//todo:利用sparkStreaming实现一定时间内的热门词汇
object SparkStreamingSocketHotWord {
  def main(args: Array[String]): Unit = {
     //1、创建sparkConf
      val sparkConf: SparkConf = new SparkConf().setAppName("SparkStreamingSocketHotWord").setMaster("local[2]")
    //2、创建sparkContext
      val sc = new SparkContext(sparkConf)
    sc.setLogLevel("WARN")
    //3、创建StreamingContext
      val ssc = new StreamingContext(sc,Seconds(5))
    //4、获取socket数据
      val stream: ReceiverInputDStream[String] = ssc.socketTextStream("192.168.216.121",9999)
    //5、切分每一行
      val wordAndOne: DStream[(String, Int)] = stream.flatMap(_.split(" ")).map((_,1))
    //6、使用开窗函数,统计相同单词出现的次数
    val result: DStream[(String, Int)] = wordAndOne.reduceByKeyAndWindow((x:Int,y:Int)=>x+y,Seconds(10),Seconds(5))
    //7、对单词出现的次数降序排列
    val sortedDstream: DStream[(String, Int)] = result.transform(rdd => {
      val sortedRDD: RDD[(String, Int)] = rdd.sortBy(_._2, false)
      val sortHotWords: Array[(String, Int)] = sortedRDD.take(3)
      //打印热门词汇
      sortHotWords.foreach(x => println(x))
      sortedRDD
    })
    sortedDstream.print()

    //开启任务
    ssc.start()
    ssc.awaitTermination()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值