头歌: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 **********/
  }
}
相关推荐
编程的一拳超人7 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
AIGC小尼7 小时前
Windows 本地 AI 漫剧全自动生产线部署完整教程(零基础、全指令、带源码、模型配置、排错方案)
人工智能·windows·ai漫剧
运维全栈笔记10 小时前
Windows 安装 WSL2 并运行 Ubuntu 24.04 指南
linux·网络·windows·ubuntu
我命由我1234512 小时前
Windows 操作系统 - 启用 D 盘虚拟内存
java·运维·服务器·windows·学习·java-ee·运维开发
Beyond_System|系统之外13 小时前
Windows 10/11 安装与配置 Zig 0.13.0:从下载到编译验证的完整教程
windows·编译工具
绿算技术14 小时前
Solidigm联合绿算技术共同发布《面向 SOHO AI 推理的存储扩展方案》技术白皮书
人工智能·科技·算法·架构·spark
2601_9623815814 小时前
Mac和Windows,哪种电脑适合新手学Python|数智码力分享
windows·python·mac·编程环境·学习入门
会飞的拖把15 小时前
Python序列详解:列表、元组、字符串的通用操作(超详细版)
开发语言·windows·python
阿里云大数据AI技术15 小时前
EMR Serverless Spark:CPU + GPU 异构计算使用指南
人工智能·spark·gpu
阿沐沐,17 小时前
Claude Code 安装教程:Windows、WSL 2 与 macOS
windows·macos