数据预处理-数据拆分代码及效果|学习笔记

简介: 快速学习数据预处理-数据拆分代码及效果

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段数据预处理-数据拆分代码及效果】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/671/detail/11651


数据预处理-数据拆分代码及效果


内容介绍:

一、数据拆分要实现的目标

二、数据拆分实现的过程


总体流程如下,数据预处理阶段脱敏完以后,接下来要做的事情是数据的拆分:

image.png

第三步是过滤数据清晰以后的数据当中,这里面去做个 map,得到的每一条数据都做了数据的脱敏,而后面的拆分、分类、解析、历史爬虫判断以及数据结构化,这几个过程也是针对一条一条数据的操作,所以要把这些步骤移到filtereddate.map 里面,放在第三步的后面。

也就是说这几个代码,这几个功能模块都是针对一条数据进行的操作,而后面的推送和监控就是针对一批一批数据库的操作,所以先把结构优化一下,移到第三步后面 filtereddate.map 里面之后,之前把身份证号码进行脱敏了,脱敏完以后接下来开始进行数据的拆分。


一、数据拆分要实现的目标

进入到目前为止,数据依然是使用#CS#进行拼接,拼接以后打到 kafka 里面,然后又接入到 streaming,数据预处理的程序当中。后续计算过程当中会频繁的使用到数据内的各个组成部分,例如 request,request 里面有 URL,requestmethod 前的 tab,服务器用户的 IP 以及 Cookie 等,现在数据是用#CS#进行拼接的,后续如果再用,第四步、第五步、第六步、第七步、第八步,好多步骤都需要用的这里面零散的数据,但是这些数据现在被拼成了一条,要用到这里面,比如说现在就用服务器的用户的IP,所以这里就用数据拆分,把这里面拼接后的数据进行拆分成一个一个的数据,这个时候想用什么拿什么,想用哪个数据拿哪个数据就可以了。


二、数据拆分实现的过程

现在数据是用#CS#拼接的,数据格式如下:

Local message=time_local 、request、 request method 、content_type 、request_body、 http_referer、 remote_adder 、http_user_agent 、time_iso8601 、server_adder、 http_cookie 、activeUserNumber

拼接后面用起来比较麻烦,所以为了方便使用,需要将数据进行拆分,然后组装成一个 TUPLE,以便于后续的使用,也就是说不用#CS#分割了,分成一个 TUPLE,里面包含了好多个数据,用哪个拿哪个就可以了。

实现这个思路的过程:使用脱敏后的数据,然后使用#CS#进行拆分,拆分完了以后得到一个一个的数据,将这一个一个的数据然后把分装成一个 TUPLE 返回。

实现的过程在数据脱敏的基础之上,然后去进行拆分,拆完以后获取数据的 URL、requestmethod 等也就是数据库,配置里面的这些数据,拆出来以后,再返回一个 TUPLE 就可以了。

代码用到一个叫 DataSplit,里面有一个小写的 dataSplit,就在这个方法里面去进行数据的拆分,创建一个DataSplit.dataSplit,在数据预处理里面有一个业务处理businessprocess,新建一个 scalaobject,然后粘贴一个datasplit,然后创建。

创建这个功能主要是用于数据切分的实现。主要就是切分完了以后返回一个 TUPLE,创建引入进来以后,先把数据传进来,数据是要基于脱敏以后的数据,就是 encryptedid,这就是脱敏以后的数据,身份证号和手机号都脱敏完了,接下来去进行拆分,拆分以后在这个时候把方法创建一下,在这个里面来实现数据的拆分,还是叫一个数据message,数据依然是使用#CS#进行拼接的,接下来就是用数据进行使用 split 来进行拆分,拆分完以后获得到每一个数据:

packagecom.air.antispider.stream.dataprocess.businessprocess

//用于数据切分的实现过程

Object Datasplit{

//实现数据的拆分

Def datasplit(message:String):Unit={

接下来就用#CS#进行拆分,message.split,#CS#加个-1,所有的#CS#都需要分割,分割完以后,得到的是一个经过拆分以后的就这些数据的 split,这个数据就得到了,然后求取一下数据的长度,value 给定个名字叫valuesLength,叫做数组,就是认为这个数组的长度,接下来判断首先要获取 request 的原始数据。

request,是第二个数据,而第二个数据拿到以后,里面实际要截取出里面的 Url,request 的里边真正要用到的数据是 URL,而这里的 POST 和 HTTP/1.1是不需要的,所以需要先使用#CS#去进行拆分,拆分完以后获得到这是第二个数据。

第二个数据的下角标是1,获取过来以后再用空格对这个数据进行拆分,拆分完以后再拿到用空格拆分完以后的第一个数据,第二个数据,第三个数据一共有三个,要拿第二个,这就是要最终拿到的结果,URL 是获取的 request,然后像里面的剩余的直接截取出来就行了。

稍微复杂一点的就是 request,先用#CS#拆分,拆分完以后再用空格拆分,拆分完以后拿到的就是 request,这个数据这个要做拆分的动作。

如果用#CS#拆分完的数组的长度1>1就是2,大于2。下角标是1,获取这个数组length里边的下角标为1的,也就是这里面的第二个数据。获取完了以后,还得用空格来进行拆分,就是 request,然后再去掉.split,再去用空格拆分,拆分完以后,长度如果大于1,大于1了才会有第二个数据。如果大于1,就再返回下角标为1的request.split的数据,也就URL,就是这里面定义了一个叫 requestURL 来进行接收,实际上就是最终的 URL,如果没有大于1就返回空,这个就截取出来数据当中 request 当中的 URL,就把它截取出来,这是第一个数据。

然后这个取完了以后,再去截取数据当中的叫requestmethod,是数据当中的第三个数据下角标是2,就获取数组的,前面用#CS#形式拆分完以后,如果长度大于二,就将下角标为2的值进行返回,就是 requestmethod。

Contenttype 的获取:是数据当中的第四个数据。第四个数据的下角标是3,就获取第三个。如果用#CS#拆分的数据,长度大于三,就是第四个,就返回第三个数据,如果没有就返回空,这个就是 Contenttype。实际上后面这些数据都一样,稍微有一点不一样的地方,就是第十个数据就是 cookie,要在 cookie 当中解析出两个数据,实际上所有代码,目的就是为了解析出 cookie 里面有一个 JSESSIONID 和 UserID4logcookie。在数据当中把这两个截取出来就行,实际上最终的目的就是要把这两个数据解析出来。而它们都包含在 cookie 里面。

这段代码的目的就是解析出 cookie 中第十个数据,角标是10的。cookie 里面的叫 JSESSIONID 和UserID4logcookie,这两个数据解析出来以后,实际上先用#CS#进行拆分的数据以及解析出来的这两个数据,就都准备完了,准备完以后,封装是一个如下所示的 TUPLE:

(request

requestMethod,contentType,requestBody ,httpReferrer,renoteAddr ,httpuserAgent ,timeIs08601,

serverAddr,

cookiesstr ,cookievalue. ,JSESSIONID,cookievalue. USERID)

TUPLE 把其放到最后并且进行返回,返回看一下数据类型,到整行里面,全部都是 string,复制然后粘贴到这个方法的返回值前面,这个代码就是用#S#拆分,拆分完以后数据获取出来以后,再封装成一个 TUPLE,再进行返回,而这里不返回 request,返回 requestURL。最终要的是 URL 进行返回,返回完了以后这个代码就写完了,最后在里面 val定义一个 TUPLE,然后来接收刚刚返回的一个 TUPLE,这个 datasplit 里是要去进行拆分,拆分完了以后再去进行返回。返回一个 TUPLE,而前面也定义了一个空 TUPLE,但这个里面表示的意思是空的:val (requesturl ,requestMethod ,content Type ,

requestBody ,httpReferrer remoteAddr ,httpuserAgent ,t imeI508601,serverAddr ,cookiesstr .cooki evalue JSESS IONID, cook evalue USERID) =Datasplit . datasplit(enc ryptedId)

调用了 datasplit,才把结果给封装进去,这就是数据拆分的一个实际的代码过程。

实际的效果:比如拿出 requesturl,返回,返回完了以后后面有一个输出,直接得出切分以后的数据效果。如果能够直接输出一个 URL,就说明拆分是没有问题的,并且返回一个 PUPLE 也没有问题。程序运行后,接下来运行爬虫。接下来就会输出 URL:

/B2C40/query/jaxb/direct/query.ao

/B2C40/query/jaxb/direct/query.ao

现在不输出 URL,改为输出 requestmethod。再运行一遍,输出全部都是 post,这是切分完以后得到的数据:

image.png

这就是数据拆分的实现过程以及效果。

相关文章
|
人工智能 Python
Python 反编译:pyinstxtractor工具和uncompyle6库的使用
上期我们介绍了库的使用方法,已经可以将.py文件编译成.exe文件运行了,这期博客,我们将教大家如何将一个编译出的.exe文件反编译出源文件。
5565 0
Python 反编译:pyinstxtractor工具和uncompyle6库的使用
|
算法 Java C语言
弗洛伊德算法求最短路径
弗洛伊德算法用于寻找加权图中各顶点间的最短路径,适用于无向图和有向图。算法基于动态规划思想,通过枚举中间顶点来更新路径,确保最终得到最短路径。该算法要求路径权值非负,否则可能出错。
807 0
|
存储 人工智能 监控
2025 年可观测 10 大趋势预测
下述报告主要整理自各大网站发布的对 2025 年可观测趋势的预测,作者合并同类项汇总 10 个共性的趋势,欢迎大家一起讨论。
大尺度信道建模 | 带你读《大规模天线波束赋形技术原理与设计 》之二十四
本节将介绍 3D 信道模型中 不同传输场景的大尺度衰落模型,包括路损计算、穿透损耗、直射径概率、阴 影衰落等。
大尺度信道建模  | 带你读《大规模天线波束赋形技术原理与设计 》之二十四
|
自然语言处理 算法 数据挖掘
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
本文介绍了一个基于Python的情感分析和聚类分析项目,使用snownlp库对豆瓣电影评论进行情感分析,并采用手肘法辅助K-means算法进行聚类分析,以探索评论中的不同主题和情感集群。
691 5
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
|
传感器 监控 安全
智能家居系统:物联网技术的应用与挑战
在这篇文章中,我们将深入探讨智能家居系统背后的技术原理、实际应用以及面临的主要挑战。通过分析物联网技术如何实现家居自动化,并结合具体案例,本文旨在提供对智能家居发展现状和未来趋势的全面理解。
|
安全 关系型数据库 MySQL
【Python】已解决:pymysql.err.OperationalError:(2003 “Can’t connect to MySQL server on ‘localhost’ ([WinEr
【Python】已解决:pymysql.err.OperationalError:(2003 “Can’t connect to MySQL server on ‘localhost’ ([WinEr
2818 1
国家自然科学基金委员会管理科学部认定的管理类30种重要期刊
A类: 1 管理科学学报 A 2 系统工程理论与实践 A  3 管理世界 A  4 数量经济技术经济研究 A  5 中国软科学 A  6 金融研究 A  7 中国管理科学 A  8 系统工程学报 A  9 会计研究 A  10系统工程理论方法应用 A  11 管理评论 A  12...
11635 0
|
存储 数据可视化 计算机视觉
基于YOLOv8的自定义数据姿势估计
基于YOLOv8的自定义数据姿势估计

热门文章

最新文章