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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 快速学习数据预处理-数据拆分代码及效果

开发者学堂课程【大数据实战项目:反爬虫系统(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

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

相关文章
|
7月前
|
数据采集 SQL 分布式计算
在数据清洗过程中,处理大量重复数据通常涉及以下步骤
【4月更文挑战第2天】在数据清洗过程中,处理大量重复数据通常涉及以下步骤
178 2
|
7月前
|
数据采集 数据挖掘 数据处理
进行数据清洗的过程通常包括以下步骤
【4月更文挑战第3天】进行数据清洗的过程通常包括以下步骤
196 3
|
7月前
|
机器学习/深度学习 数据可视化 算法
数据处理方法—— 7 种数据降维操作 !!
数据处理方法—— 7 种数据降维操作 !!
215 0
|
7月前
|
数据采集 数据可视化 数据挖掘
数据清洗有什么方式
数据清洗有什么方式
|
4月前
|
机器学习/深度学习 人工智能 前端开发
如何正确拆分数据集?常见的三种方法总结
如何正确拆分数据集?常见的三种方法总结
|
5月前
|
数据采集 机器学习/深度学习 数据可视化
关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理,进行数据探索,选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。
【7月更文挑战第5天】这是一个关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理(填充缺失值,处理异常值),进行数据探索(可视化和统计分析),选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。此案例展示了数据科学的典型流程。
76 2
|
6月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python实现高效的数据清洗与预处理流程
本文旨在探讨如何使用Python编程语言及其强大的数据处理库(如pandas、numpy等)来构建一个高效且灵活的数据清洗与预处理流程。与常规的数据清洗方法不同,本文不仅关注于传统的缺失值填充、异常值处理、数据类型转换等步骤,还引入了数据质量评估、数据特征选择以及自动化处理流程的设计等高级主题。通过实际案例和代码演示,本文将为读者提供一套完整的数据清洗与预处理解决方案,助力数据分析师和数据科学家在数据探索阶段更加高效、准确地处理数据。
|
6月前
|
算法 数据挖掘 数据处理
数据分析之可重复与独立样本的T-Test分析
数据分析之可重复与独立样本的T-Test分析
41 2
|
数据挖掘
R语言笔记丨数据的合并、拆分、整合
R语言笔记丨数据的合并、拆分、整合
|
数据采集 机器学习/深度学习 算法
②数据预处理之数据清理,数据集成,数据规约,数据变化和离散化
数据预处理之数据清理,数据集成,数据规约,数据变化和离散化
821 0
②数据预处理之数据清理,数据集成,数据规约,数据变化和离散化