关联 DStream 和 RDD

transform(func) Return a new DStream by applying a RDD-to-RDD function to every RDD of the source DStream.
This can be used to do arbitrary RDD operations on the DStream.

黑名单过滤

实现思路:
拿到访问日志,直接是DStream, 在数据库中建立需要过滤的字段,拿到后,需要转成RDD,
设置为字段为true,即过滤,建立表的左链接,
字段以 : 进行分隔,分隔后取元组,再取元组的元组,
测试: 将数据在IDEA中打印出来
开发: 直接存到数据库中 访问日志 ==> DStream(直接拿到,生成DStream)
20180808,zs
20180808,ls
20180808,ww
20180808,w2
20180808,w3
20180808,w4 ==》 (zs: 20180808,zs)(ls: 20180808,ls)(ww: 20180808,ww) 黑名单列表 ==> RDD(这块模拟,不用数据库,直接用list,转成RDD)
zs
ls
==> (zs: true)(ls: true) // 过滤的结果(为true过滤掉) true: 即为黑名单 ==> 20180808,ww //(最终得到的结果) leftjoin //(左连接) 左边的访问日志表不变
(zs:[<20180808,zs> ,<true>]) x
(ls:[<20180808,ls> ,<true>]) x
(ww:[<20180808,ww> ,<false>]) ==> tuple 1

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() //在控制台打印信息 (这块结果应该是有问题的,它只显示最后一个), 应该在 filter或map这块,它是有问题的, 感觉问题在 map, 对元组的掌握,还有待提高 ssc.start()
ssc.awaitTermination()
}
}

SparkStreming中 `transform()`算子的 的使用的更多相关文章

  1. Snap.svg中transform旋转值的“r+数组”表现形式

    Snap.svg中transform的值还可以写为类似以下这种形式: transform:'r'+[100,[50,50]]; 这种写法的意思是,让元素以(50,50)为旋转中心点,然后旋转100度. ...

  2. 关于CSS3中transform变换的小坑

    2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...

  3. 【Spark篇】---Spark中控制算子

    一.前述 Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存. 控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化 ...

  4. spark-streming 中调用spark-sql时过程遇到的问题

    在spark-streming 中调用spark-sql时过程遇到的问题 使用版本:spark-2.1.0 JDK1.8 1. spark-sql中对limit 的查询结果使用sum() 聚合操作不生 ...

  5. 第98天:CSS3中transform变换详解

    transform变换详解 本文主要介绍变形transform. Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放sc ...

  6. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  7. Unity 3D Intantiate过程中Transform 空物体和本体之间的关系

    想当年刚学Unity的时候,这个问题困扰了我好几天,因此来分享一下当初解决问题的思路. 我们通过Unity构建场景的过程中,经常发现一个现象,就是物体在拖进场景中后,我们会发现物体是反的,通过改变物体 ...

  8. 关于css3中transform的理解(只是改变状态未改变其真正的属性)

    众所周知,在css3中可以用animation实现动画效果,在这里用一个transform:translateX举例. <div class="div1"></d ...

  9. CSS3中transform几个属性值的注意点

    transform(变形)是CSS3中的元素的属性,transform的属性值主要包括旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix 基本用法可以参考文 ...

随机推荐

  1. FOLDER

    一.建noTab的Folder Form:1.创建数据库对象:  create table  和相应的view. 2.基于模板Template.fmb创建一个新的Form:****.fmb  添加一个 ...

  2. [Go] gocron源码阅读-判断是否使用root用户执行

    判断是linux系统,并且uid为0,allowRoot是通过命令行传参传进来的,通过flag包解析出来的,可以使用go run node.go -h看到这些参数 && !allowR ...

  3. [Linux] 使用mount来挂载设备到目录

    一般情况下直接mount 设备路径 目录路径,就可以了.umount 设备名,就可以卸载这个设备了使用lsblk -f可以查看挂载的设备,以及这些设备的文件系统. root@tao-PC:/boot# ...

  4. Lnmp架构部署动态网站环境.2019-7-3-1.4

    安装wiki开源产品 一.创建数据库 [root@Lnmp bbs]# mysql -uroot -p123456 mysql> create database wiki; #创建wiki数据库 ...

  5. Windows下使用ssh-add报错 Error connecting to agent: No such file or directory

    Windows下使用ssh-add报错 Error connecting to agent: No such file or directory 环境信息 操作系统:windows 10 终端:Win ...

  6. 浅谈js的事件冒泡和事件捕获

    本文地址:https://www.cnblogs.com/christineqing/p/7607113.html 前言:    这篇文章起源于上次工作上的原因,在事件上出的bug,所以就抽空写出一篇 ...

  7. [C2W1] Improving Deep Neural Networks : Practical aspects of Deep Learning

    第一周:深度学习的实用层面(Practical aspects of Deep Learning) 训练,验证,测试集(Train / Dev / Test sets) 本周,我们将继续学习如何有效运 ...

  8. vue使用技巧

    引入外部js文件 1.在根目录创建文件夹,例如‘libs’,将js文件拷贝至libs目录下 2.修改webpack.dev.conf.js和webpack.prod.conf.js,在CopyWebp ...

  9. http状态码大全(404、505、502,500)

    HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源HTTP 401.4 ...

  10. Gin框架 - 数据绑定和验证

    概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方案: engine : ...