头歌:Spark Streaming

第1关:套接字流实现黑名单过滤

简介

套接字流是通过监听Socket端口接收的数据,相当于Socket之间的通信,任何用户在用Socket(套接字)通信之前,首先要先申请一个Socket号,Socket号相当于该用户的电话号码。同时要知道对方的Socket,相当于对方也有一个电话号码。然后向对方拨号呼叫,相当于发出连接请求。对方假如在场并空闲,相当于通信的另一主机开机且可以接受连接请求,拿起电话话筒,双方就可以正式通话,相当于连接成功。Spark Streaming通过监听套接字端口获取流数据信息并处理。

黑名单过滤是获取套接字流发送的名单信息,通过指定的黑名单信息对其进行过滤,输出结果为没有黑名单的名单信息。

任务描述

本关任务:本关是利用套接字流监听方法,监听名单信息并过滤黑名单信息。首先需要模拟名单的生成,首先需要建一个文档,每行为一个姓名。然后编写代码,当有指定套接字连接产生时,从文件中依次选取所有名单,发送给套接字端口。另外在编写代码,通过连接套接字端口,监听端口的数据,获取发送的名单,并过滤黑名单。需用提供的文档文件内的名单来完成此实验。名单文档内容如下:

Jim

Mary

Tom

Jack

Abby

Bee

Belle

Babs

Carla

Dale

Dan

Gary

Ken

Jane

Paige

相关知识

1.名单生成器的创建

代码依次获取指定文件中的一个名单。内部是首先获取指定名单文件,然后指定监听端口,然后等待连接建立,连接建立后依次获取一个名单总个数内的整数,并索引到名单,将其发送至套接字端口。

java 复制代码
import java.io.{PrintWriter}
import java.net.ServerSocket
import scala.io.Source
object NameProducer {
  def main(args: Array[String]): Unit = {
    //获取指定文件
    val filename = "/root/data/Namelist"
    //指定文件按行切分为list
    val lines = Source.fromFile(filename).getLines.toList
    //获取list长度
    val filerow = lines.length
    //指定监听窗口,当外部程序请求时建立连接
    val listener = new ServerSocket(5566)
      //等待socket连接成功
      println("bengin11111111111!!!")
      val socket = listener.accept()
      new Thread() {
        override def run = {
          println("Got client connected from: " + socket.getInetAddress)
          //创建写入socket对象
          val out = new PrintWriter(socket.getOutputStream(), true)
          println("bengin222222222222222222!!!")
            for (i <- 0 to filerow-1) {
              //逐行取一个名字
              val content = lines(i)
              println(content)
              //写入socket
              out.write(content + '\n')
              //清空缓冲区数据
              out.flush()
            }
          socket.close()
        }
      }.start()
  }
}
2.监听套接字端口过滤黑名单

首先要设置需要过滤的黑名单:

java 复制代码
val BlackList = Array("name1", "name2")

接着把名单转换成RDD,然后连接套接字端口,连接端口代码如下:

java 复制代码
ssc.socketTextStream("localhost", 5566)

编程要求

根据提示,补充监听套接字并过滤黑名单代码文TransformBlackList。

测试说明

平台会对你编写的代码进行测试:

测试输入:自动获取指定的Namelist文件。

预期输出:

Jim

Tom

Jack

Bee

Belle

Babs

Dale

Dan

Gary

Jane

java 复制代码
import org.apache.spark.SparkConf
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.Seconds

object TransformBlackList {
  def main(args: Array[String]): Unit = {
    /********** Begin **********/
    // 初始化
    val sparkConf = new SparkConf().setAppName("TransformBlackList").setMaster("local[2]")
    // 创建StreamingContext,设置每五秒刷新一次
    val ssc = new StreamingContext(sparkConf, Seconds(5))
    ssc.sparkContext.setLogLevel("ERROR")
    // 设置需要过滤的黑名单(Abby、 Paige、 Carla、 Mary、 Ken)
    val BlackList = Array("Abby", "Paige", "Carla", "Mary", "Ken")
    // 把黑名单数组转换成rdd
    val BlackListRdd = ssc.sparkContext.parallelize(BlackList)
    // 设置主机名localhost,端口号5566
    val NameList = ssc.socketTextStream("localhost", 5566)
    // 过滤黑名单算法
    val ValidName = NameList.transform(rdd => {
      rdd.filter(name => !BlackList.contains(name))
    })

    ValidName.print()
    ssc.start()
    // 等待足够长的时间以触发至少一次计算
    Thread.sleep(5000)
    ssc.stop(false, false)
    /********** End **********/
  }
}
相关推荐
计算机毕业编程指导师37 分钟前
【计算机毕设推荐】Python+Spark卵巢癌风险数据可视化系统完整实现 毕业设计 选题推荐 毕设选题 数据分析 机器学习 数据挖掘
hadoop·python·计算机·数据挖掘·spark·毕业设计·卵巢癌
极光代码工作室1 小时前
基于大数据的校园消费行为分析系统
大数据·hadoop·python·数据分析·spark
草履虫君1 小时前
windows系统装机,小白win10装机教程wepe模式,包括系统盘怎么制作,bios怎么设置
windows·经验分享
minxihou1 小时前
迅雷下载导致 Windows 11 频繁卡死?一根 SATA 线的锅
windows·磁盘
我不是立达刘宁宇2 小时前
windows信息收集
windows·安全
水饺编程3 小时前
第5章,[标签 Win32] :设备的尺寸(三)
c语言·c++·windows·visual studio
code bean3 小时前
Windows 管道命令实战:从端口查看到进程定位
windows
杨云龙UP3 小时前
Windows Server 2012 环境下 Oracle 11.2 使用 expdp 实现自动备份、异地复制与定期清理_20260504
服务器·数据库·windows·mysql·docker·oracle·容器
能喵烧香3 小时前
跨越系统的开源尝试:KDE Windows版本全解析
linux·windows·开源
AI玫瑰助手3 小时前
Python入门:Windows/macOS/Linux系统安装Python教程
windows·python·macos