• 2023_Spark_实验二十:SparkStreaming累加计算单词频率


    一、需求分析

    在服务器端不断产生数据的时候,sparkstreaming客户端需要不断统计服务器端产生的相同数据出现的总数,即累计服务器端产生的相同数据的出现的次数。

    二、实验环境

    centos7 + nc + spark2.1.1 + windows + idea

    三、思路分析

    流程分析

    思路分析

    每次客户端程序处理服务器端数据后,将其结果缓存在检查点中,下一次客户端读入数据并处理数据时会去检查点根据key查询和进行更新,并重新将结果更新到检查点中。

    检查点:本质上就是对应于HDFS上的一个目录,将数据写入到该目录下以文件的形式将结果保存下来。故,需要先在hdfs上创建检查点对应的目录。

    四、编程实现

    实验步骤:

    • 编写客户端处理程序,程序如下

    1. import org.apache.spark.SparkConf
    2. import org.apache.spark.storage.StorageLevel
    3. import org.apache.spark.streaming.{SecondsStreamingContext}
    4. object MyTotalNetworkWordCount {
    5. def main(args: Array[String]): Unit = {
    6. //创建一个Context对象: StreamingContext (SparkContext, SQLContext)
    7. //指定批处理的时间间隔
    8. val conf = newSparkConf().setAppName("MyNetworkWordCount").setMaster("local[2]")
    9. val ssc = new StreamingContext(conf,Seconds(5))
    10. //设置检查点
    11. ssc.checkpoint("file:///d:/temp/checkpoint")
    12. //创建一个DStream,处理数据,hadoop001为虚拟机的主机名,端口号为netcat服务的端口号
    13. val lines = ssc.socketTextStream("192.168.245.110",1234,StorageLevel.MEMORY_AND_DISK_SER)
    14. //执行wordcount
    15. val words = lines.flatMap(_.split(" "))
    16. //定义函数用于累计每个单词的总频率
    17. val addFunc = (currValues: Seq[Int], prevValueState: Option[Int]) => {
    18. //通过Spark内部的reduceByKey按key规约,然后这里传入某key当前批次的Seq/List,再计算当前批次的总和
    19. val currentCount = currValues.sum
    20. // 已累加的值
    21. val previousCount = prevValueState.getOrElse(0)
    22. // 返回累加后的结果,是一个Option[Int]类型
    23. Some(currentCount + previousCount)
    24. }
    25. val pairs = words.map(word => (word, 1))
    26. val totalWordCounts = pairs.updateStateByKey[Int](addFunc)
    27. totalWordCounts.print()
    28. ssc.start()
    29. ssc.awaitTermination()
    30. }
    31. }

    • 运行程序

    • 在Linux中启动nc: nc -l  1234

    • 输入测试数据,每输入一次数据执行一次回车:

    查看下检查点是否有数据:

  • 相关阅读:
    力扣 234. 回文链表
    (5)SpringMVC处理携带JSON格式(“key“:value)请求数据的Ajax请求
    Django数据表修改方法
    css3 选择器
    基于ruoyi框架项目-部署到服务器上
    深度学习-RNN
    一级造价工程师(安装)- 计量笔记 - 第四章第四节电气照明及动力设备工程
    类android设备reset过程
    感悟2022年:玫琳凯公布今年上半年以来的奖项、里程碑和成就
    ChatGLM系列八:微调医疗问答系统
  • 原文地址:https://blog.csdn.net/pblh123/article/details/133856132