头歌: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.名单生成器的创建


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

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.监听套接字端口过滤黑名单


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

val BlackList = Array("name1", "name2")

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

ssc.socketTextStream("localhost", 5566)

编程要求


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

测试说明


平台会对你编写的代码进行测试:
测试输入:自动获取指定的Namelist文件。
预期输出:

Jim
Tom
Jack
Bee
Belle
Babs
Dale
Dan
Gary
Jane

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 **********/
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/586784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程面试问题与答案

1. 什么是线程安全&#xff1f; 答&#xff1a; 线程安全意味着多个线程可以同时访问一个类的实例而不引起任何问题或不一致的结果。线程安全的代码会通过同步机制来确保所有线程都能正确地访问共享资源。 2. 解释Java中的synchronized关键字。 答&#xff1a; synchronized…

秒杀系统的挑战和应对设计

秒杀系统是日常系统开发过程中经常遇到的场景&#xff0c;那么如何可以准备哪些措施来保证秒杀过程中系统的可用性以及一致性呢&#xff1f; 秒杀活动&#xff0c;需要满足各方的需求 作为用户&#xff0c;希望能够抢到自己中意的优惠 作为商户&#xff0c;希望券不超发&#…

MATLAB 字符串

MATLAB 字符串 在MATLAB中创建字符串非常简单。实际上&#xff0c;我们已经使用了很多次。例如&#xff0c;您在命令提示符下键入以下内容- 示例 my_string ‘(cainiaojc.com)’ MATLAB将执行上述语句并返回以下结果 my_string (cainiaojc.com) MATLAB将所有变量视为数组&a…

Macos安装OrbStack

什么是OrbStack OrbStack 是一种在 macOS 上运行容器和 Linux 机器的快速、轻便和简单方法。它是 Docker Desktop 和 WSL 的超强替代品&#xff0c;所有这些都在一个易于使用的应用程序中。 在Macos M系列芯片上&#xff0c;经常遇到docker镜像不兼容的问题&#xff0c;此时使…

【初识Redis】

初识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;它提供了一个高性能的键值存储系统&#xff0c;并且支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合等。Redis的特点包括&#xff1a; 内存存储&…

[C语言]典型例题:小蚂蚁爬橡皮筋、买汽水问题、导致单词块、菱形打印……

1、小蚂蚁爬橡皮筋问题 假设橡皮筋长4m&#xff0c;小蚂蚁从一端爬向另一端每天爬1m&#xff0c;且每爬了1m&#xff0c;橡皮筋会立马拉伸4m&#xff0c;在理想条件下&#xff0c;小蚂蚁需要爬多少天可以到达橡皮筋的另一端&#xff1f; 不仔细想&#xff0c;我们很可能认为小蚂…

2023年蓝桥杯C++A组第三题:更小的数(双指针解法)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

JavaEE 初阶篇-深入了解网络原理中传输层的端口号与 UDP 协议报文格式

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 端口号概述 1.1 端口号的作用 1.2 端口号不能重复被多个进程绑定 2.0 传输层协议 - UDP 2.1 UDP 的特性 2.2 UDP 的报文格式 1.0 端口号概述 端口号是计算机网络中…

多线程事务怎么回滚

1、背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败…

【算法小白周赛1A】分析 - 题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/155 题目描述 小可可最近在学数学运算&#xff01;他希望考考你&#xff0c;给你两个整数 A , B A,B A,B&#xff0c;询问 A B A\times B AB 是否是偶数。 注意&#xff0c;可能存在前导 0 0 0&#xff0c;比如…

面试题-Redis篇

什么是 Redis? Redis 是完全开源免费的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis 支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时 …

【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、回调函数二、快速排序(Qsort)2.1 Qsort参数部分介绍2.2 不…

【Flutter】极光推送配置流程(小米厂商通道) 章二

前言 继【Flutter】极光推送配置流程(极光通道/华为厂商/IOS) 章一 并且&#xff0c;我大概率不会去修改第一篇文章的内容。 随着我自己在配置公司的项目的同时&#xff0c;我希望一直更新这个推送系列文章。 在章一配置完后&#xff0c;也是出现了一些问题&#xff0c;所以本…

【第1章】spring-mvc搭建

文章目录 前言一、准备二、搭建1.搭建2.项目结构 三、第一个Servlet程序1. jsp2. servlet3. 启动 总结 前言 Java已经进入了飞速发展的阶段&#xff0c;spring-mvc也发生了巨大的变化&#xff0c;最让人无法忍受的就是javax.servlet.* 变成了jakarta.servlet.* ps:虽然使用起来…

GPT-ArcGIS数据处理、空间分析、可视化及多案例综合应用

在数字化和智能化的浪潮中&#xff0c;GIS&#xff08;地理信息系统&#xff09;和GPT&#xff08;生成式预训练模型&#xff09;的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…

吴恩达2022机器学习专项课程(一)7.2 逻辑回归的简化成本函数课后实验 Lab5

问题预览/关键词 二分类问题的训练集&#xff08;多特征&#xff09;绘制训练集数据的散点图自定义plot_data() Python实现逻辑回归的成本函数自定义sigmoid() 调用成本函数不同的w&#xff0c;b&#xff0c;绘制逻辑回归模型的决策边界验证哪条决策边界效果好总结 二分类问题的…

精通GDBus:Linux IPC的现代C接口

目录标题 1. GDBus介绍2. GDBus的优点3. 安装GDBus4. 使用GDBus连接到D-Bus总线实现D-Bus服务调用D-Bus方法发送和接收信号 5. 总结 在Linux环境下&#xff0c;不同的程序需要通过某种方式进行通信和协同工作。GDBus是GLib库的一部分&#xff0c;提供了一个基于GObject系统的、…

中科驭数受邀成为移动云智能芯片开放实验室首批成员企业

4月28日至29日&#xff0c;2024中国移动算力网络大会在苏州举行。大会以“算力网络点亮AI新时代”为主题&#xff0c;全面展示了中国移动最新算力网络成果与能力。中科驭数作为移动云智能芯片开放实验室首批合作伙伴&#xff0c;受邀参加入驻仪式&#xff0c;中科驭数高级副总裁…

OpenCV的图像矩(64)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何为等值线创建边界旋转框和椭圆(63) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; Image Moments&#xff08;图像矩&#xff09;是 OpenCV 库中的一个…

C语言----函数

1.函数的概念 函数&#xff1a;founction c语言的程序代码都是函数组成的 c语言中的函数就是一个完成某项特定的任务的一段代码&#xff0c;这段代码有特殊的写法和调用方法 c语言中我们一般见到两种函数&#xff1a; .库函数 .自定义函数 2.库函数 有对应的头文件 #i…
最新文章