开发者学堂课程【大数据实战项目 - 反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建)第七阶段:离线计算-数据预处理(指标计算前)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/675/detail/11739
离线计算-数据预处理(指标计算前)
内容简介:
一、表 request 中将所有黑名单数据读取出来
二、查询转换率必须的字段和注册成 TransforRateNeeded 表
三、打阶段标签(自定函数)
四、FlowID 不为空时对应为爬虫
五、代码准备完后,整体运作
一、表request中将所有黑名单爬虫数据读取出来
(1)、读取黑名单数据(包含非爬虫数据)
代码
Val AddSpiderIag=sqlContext.sql(sqlText.sql=”select*from request left outer join SpiderIP where request remoteAddr=”SpiderIP,remoteAddr”
因为数据表中还有一批数据是黑名单,所以要将其剔除。
要在数据当中过滤出所有黑名单的数据,把不是爬虫的都过滤掉。
原始数据是包含黑名单的数据,爬虫已经被列成了两张表,所以两相对比以下就可以将数据提取出来。
最后的 sql 语句已经写好了,那执行最后一句 select 的*from request,查询所有的数据在这个表,这个表就是通过离线和预处理处理完以后的数据直接写到 HDFS,这些数据也就是我们流程当中经4步骤处理完的顺序写的 Kafka,5-1步骤中读过来的数据直接写到 HDFS 去,这批数据里面包含爬虫,也包含非爬虫,那接下来要把所有的分爬虫剔除掉。
(2)、去除筛选出来的黑名单数据中的非爬虫数据
where 这个 request 的 remoteAddr 等于 spider ,等于 remoteAddr,spider 里有 remoteAddr,spider 识别出来的 spider 上的IP,而这里也有一个 remoteAddr,当 remoteAddr 数据相等的时候,这个数据就是爬虫,而要找它相等的,那就相当于把所有的爬虫数据全部都过滤出来了。
到这里面以后我们处理完的结果就是返回的结果,就是所有的爬虫数据。而预处理以后的那些不是爬虫的数据就都过滤掉了
二、查询转换率必须的字段和注册成TransforRateNeeded表
(1)、查询转换率
查询转化率,必须字段查询转换的时候,我们大约有21个字段,但这21个字段不是所有的字段我们都能用得上,不是所有的资料我们都有需要,大家查询的数据,就是查询转化,我们要支撑这些报表,它需要用到哪些字段呢?
实际上用到的字段只有六个,分别为:request、JSESSIONID、Stagetape、FlowID、traveType、flightType
(2)、注册成TransforRateNeeded表
将必须的字段注册成了一张表,字段变少了,从21个变成6个,但是函数没少。
然后查询还是前面的这个查询,21个字段,又用这21个字段把时间查出来,时间查出来以后,我把时间T进行了替换,时间就有了,也就是这个数据里面的时间抽取出来,然后去进行一个截取,就是这个 valueOf,把它转化成了这个时间,先处理好,后面我们需要使用。
三、打阶段标签(自定函数)
代码
s
qlContext.udf.register(name=”Stage”,(request:String)=>{
i
f (request.matches(regex=”^,*/bookingnew/.*$”)//
预定,商城
|
| request.matches(regex=”^.*/bookingGroup/.*$”)
|
|request.matches(regex=”^.*/ita?int1/zh/shop/.*$”)){
“1”
{
else if (request.matches(regex=”^.*/modules/permissionnew/.*$”)//
乘客信息
|
|request.matches(regex=”^.*/ita/int1/zh/permissionnew/.*$”)){
/
/
支付
“3”
}else{
//其他,查询等操作
“0”
}
标签实际上是一个自定义函数,它的参数是旅客,我们前面把旅客自查出来的6个字段里面第1个就是 request,然后我们传输 request,并且进行判断,检测客户的路径UIL与设置的任意一个条件是否能匹配上,能,就返回一个1,如果和下面两个条件能匹配的上,那我就返回一个2,如果之后的条件匹配上了,我就返回一个3,否则我就返回个0。
也就是0、1、2、3返回这个值。1代表进入商城,2代表乘客信息,3代表支付,0代表其他。
三个流程不断深入,引导客户完成界面操作。
四、FlowID不为空时对应为爬虫(第二个udf函数)
代码
sqlContext.udf.register(name=”Spider”,(FlowID:string)=>{if(FlowID==nu11||”nu11”.equalsIgnoreCase(FlowID)){//
非爬虫
”0”}else{//
爬虫
”1”}
判断数据是不是爬虫,传入 flowID,流程 ID,如果它等于或者是等于这个字符串,那么就表示他不是爬虫,如否则,也就是只要它里面有数据,它就是爬虫。
五、代码准备完后,整体运作
代码
Val request1=sqlContext.sql(sqlText=”select request,JSESSIONID,Stage(request)as StageTag,Spider(FlowID) as Spoder”flightType,trave1Type
from
TransformRateNeeded”)
/
/request1.show(20)
//
从表T
ranformRateNeeded
中过滤掉SEESSIONID为空的数据
Val request1 transformed=request1,filter(request1(“JSESSIONID”),contains(“NULL”))
写入一段 sql 函数,执行上面写道的两个udf自定义函数,以及飞行利用查询率找到的六个字段组成的TranformRateNeeded 表格。