sparkstreaming 黑名单过滤
要用到transform and rdd.leftOuterJoin
transform: 使 DStream 和 RDD 之间的类型进行了转换,然后可以进行调用
leftOuterJoin(左外连接,左边表不变,右边变)
BlackFilterApp.scala
package com.imooc.streaming
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object BlackFilterApp {
def main(args: Array[String]): Unit = {
val sparkconf = new SparkConf().setMaster("local[2]").setAppName(this.getClass.getSimpleName)
val ssc = new StreamingContext(sparkconf,Seconds(5))
/**
* 构建黑名单(要过滤的数据)
*/
val blacks = List("zs", "ls") // 一般这条在数据库中,用 read 读进来即可
val blacksRDD = ssc.sparkContext.parallelize(blacks)//转成RDD
.map(x => (x, true))
//将这个元素 x 重新定位为一个新字段 (x,true)
//(("zs","true"),("ls","true"))
val lines = ssc.socketTextStream("localhost", 8888)
//20180808,zs 原来的格式
//zs,20180808,zs 处理后的格式
//取index=1的元素,然后在跟上它自身
val clicklogs = lines.map(x => (x.split(",")(1), x))
.transform(rdd => {
//blacksRDD进行map操作后它是RDD格式,此处的lines进行map操作后,它是DStream[U]格式,
//所以此处,要将DStream和RDD进行联合,就要使用transform算子,
//通过将RDD-to-RDD函数应用于源DStream的每个RDD来返回新的DStream。
//这可以用于在DStream上执行任意RDD操作。
rdd.leftOuterJoin(blacksRDD)
//进行表的左外连接 leftOuterJoin
//
// 端口传进来的数据,经过处理后
// zs,20180808,zs
// ls,20180808,ls
// ww,20180808,ww
//
// 黑名单中的数据
// (("zs","true"),("ls","true"))
//
//进行关联后的数据
// (zs:[<20180808,zs>,<true>]) x
// (ls:[<20180808,ls>,<true>]) x
// (ww:[<20180808,ww>,<false>]) ==> tuple 1
.filter(x => x._2._2.getOrElse(false) != true)
// 过滤(zs: [<20180808,zs> ,<true>])中,第二个元素的中的第二个元素,判断是否等于true,如果不为true,则返回false,
// 此处运行后,就只剩下为false的元素了 (ww:[<20180808,ww>,<false>]) ,只有这一条了
.map(x => x._2._1)
//取(zs,[<20180808,zs>,<true>])中第二个元素的第一个元素 (tuple的使用)
})
clicklogs.print()
ssc.start()
ssc.awaitTermination()
}
}
结果: 20180808,ww
还是有出入的,有点问题,只有最后一条
sparkstreaming 黑名单过滤的更多相关文章
- 56、Spark Streaming: transform以及实时黑名单过滤案例实战
一.transform以及实时黑名单过滤案例实战 1.概述 transform操作,应用在DStream上时,可以用于执行任意的RDD到RDD的转换操作.它可以用于实现,DStream API中所没有 ...
- 一个spark streaming的黑名单过滤小例子
> nc -lk 9999 20190912,sz 20190913,lin package com.lin.spark.streaming import org.apache.spark.Sp ...
- 通过案例对SparkStreaming透彻理解三板斧之三
本课将从二方面阐述: 一.解密SparkStreaming Job架构和运行机制 二.解密SparkStreaming容错架构和运行机制 一切不能进行实时流处理的数据都将是无效的数据.在流处理时代,S ...
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...
- Shell 脚本模拟 milter 实现黑白名单及关键词过滤
程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键 ...
- python实现skywalking的trace模块过滤和报警
skywalking本身的报警功能,用起来视乎不是特别好用,目前想实现对skywalking的trace中的错误接口进行过滤并报警通知管理员和开发.所以自己就用python对skywalking做了二 ...
- 王家林 大数据Spark超经典视频链接全集[转]
压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十一之铭文升级版
铭文一级: 第8章 Spark Streaming进阶与案例实战 黑名单过滤 访问日志 ==> DStream20180808,zs20180808,ls20180808,ww ==> ( ...
- 【Spark】SparkStreaming-流处理-规则动态更新-解决方案
SparkStreaming-流处理-规则动态更新-解决方案 image2017-10-27_11-10-53.png (1067×738) elasticsearch-head Elasticsea ...
随机推荐
- MySQL日常使用遵循的规范建议
一 . 基础规范 1.必须使用InnoDB存储引擎 解读:支持事务:支持行级锁:支持MVCC多版本控制:支持外键:死锁自动检测:并发性能更好.CPU及内存缓存页优化使得资源利用率更高. 2. 表字符 ...
- ubuntu安装cairo
查看网上大神们的各种安装经过,最后google之后执行下面两句就搞定了:apt-get install python-cairo apt-get install libcairo2
- [Linux] 编写Dockerfile文件自动构建镜像
Dockerfile是一个文本文件,按顺序包含构建给定镜像所需的所有命令Docker通过读取Dockerfile中的指令自动构建图像 . Dockerfile遵循特定的格式和指令集,您可以在Docke ...
- C语言异常处理
异常的概念-程序在运行过程中可能产生异常-异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对 ...
- ioctl操作
在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数.ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口.网络程序(特别是服务器程序)经常在程序启动执行后使 ...
- Spring Boot 2.2.1 正式发布,需特别注意这个注解的使用!
Spring Boot 2.2.1 已于2019年11月7日正式发布. 该版本内容包含110项修复.改进和依赖升级. 如果开发者要从Spring Boot 2.2.0升级到2.2.1的话,这里要特别注 ...
- appium--使用PyYAML封装Capability
前戏 YAML 语言的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下. YAML大小写敏感: 使用缩进代表层级关系: 缩进只能使用空格,不能使用TAB,不要求空 ...
- Luogu P4068 [SDOI2016]数字配对
反正现在做题那么少就争取做一题写一题博客吧 看到题目发现数字种类不多,而且结合价值的要求可以容易地想到使用费用流 但是我们如果朴素地建图就会遇到一个问题,若\(i,j\)符合要求,那么给\(i,j\) ...
- python统计wav文件的时长
import wave import os.path # 音频存放文件夹绝对路径 filedir = '/Users/111/PycharmProjects/TextClassify/wav' lis ...
- Vue.js 源码分析(三) 基础篇 模板渲染 el、emplate、render属性详解
Vue有三个属性和模板有关,官网上是这样解释的: el ;提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标 template ;一个字符串模板作为 Vue 实例的标识使用.模板将会 ...