数据预处理-航线类型操作类型-逻辑判断实现|学习笔记

简介: 快速学习数据预处理-航线类型操作类型-逻辑判断实现

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段数据预处理-航线类型操作类型-逻辑判断实现】学习笔记,与课程紧密联系,让用户快速学习知识。

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


数据预处理-航线类型操作类型-逻辑判断实现


内容介绍:

一、概述

二、打标签的具体思路


一、概述

更新规则已经学习,接下来开始实现真正的打标签动作,现在数据、url 以及四个业务场景的规则都存在了,接下来就开始实现打标签动作,确定思路。


二、打标签的具体思路

1.定义方法,参数为经过拆分后的 URL 和分类的广播变量

首先要定义一个方法,然后把 url 和分类的广播变量传进去,方法的具体名称可以从讲义中拷贝过来:RequestTypeClassifier.classifyByRequest,程序中目前还没有这个方法,因此会显示报错,需要在数据预处理的businessprocess 里右键新建一个叫 packageobject,Name 即为 RequestTypeClassifier,用于实现数据分类的代码编写,此时返回可以看到程序中该方法就不会报错了。classifyByRequest 这个方法还没有,会显示报错,稍后进行该方法的创建。首先将 url 传入,如何判断数据到底是哪个业务场景,可以用 url 去匹配四个业务规则,url 拿到后再把前面广播变量里面的数据拿到,在广播变量后(broadcastRuleMaps)输入.value,.value 才是真正的数据,数据url 和规则都有了后,接下来进行方法代码的编写。

2.进入 classifyByRequest 里面创建方法,主用来实现航线航线和操作类型的标签

将?删掉并补全{}的内容,requesturl 已经存在了,规则 value 修改为 RuleMaps,把规则拿出来对应随堂笔记当中:先在分类的广播变量中获取四种业务场景的规则,获取出来以后遍历四个规则去进行匹配,匹配完以后再最终返回类型这一部分的流程。

第一步:把数据的规则都读取出来,规则分为四种,分别是:国内查询的规则、国际查询的规则、国内预定的规则、国际预定的规则,四个规则分别进行接收,分别创建变量,国内查询为:val nqRuleList=RuleMaps.get("key"),key的名字叫做 nqRuleList,因为 nqRuleList 作为 key 写进的,也应该以该名称读出来,代码为:val nqRuleList=RuleMaps.get("nqRuleList");同理,

国际查询的名字为 iqRuleList(international query),代码为:val iqRuleList=RuleMaps.get("iqRuleList");

国内预定的名称为 nbRuleList(national book),代码为:val nbRuleList=RuleMaps.get("nbRuleList");

国际预定为 ibRuleList(international book),代码为:val ibRuleList=RuleMaps.get("ibRuleList")

第二步:在 Map 里边把四种业务查询的规则读取完成之后,接下来做第二件事情,遍历四种情况的规则与数据进行匹配,分别完成遍历国内查询规则、国际查询规则、国内预定规则、国际预定规则。先拿到规则,这里规则已经存在了,输入:for(nqRule<-nqRuleList){}后去做判断。如果数据match到其中一个规则(代码为:if (requesturi.matches(nqRule)))。

  • 遍历国内查询规则

任何一个数据匹配到国内查询,就表明该数据是国内查询业务,该 url 就是国内查询。说明:使用数据匹配国内查询的规则,若匹配成功,表示该 URL 所在的数据就是国内查询。即 url 确定后,用 URL 匹配到里面的任何一个规则,就可以确定 url 的业务场景,确定以后就可以去实现具体的返回类型。bin 里面的 processdata 有专门的标记用来表示是国内查询还是国际查询,双击并打开最后的 request type,request type 分为 flight type 和 behaviour type,分别表示 flight type 和 behaviour type 的枚举,flight type 代表了国内和国际,behaviour type 代表了查询和预定。首先需要实现 flight type,复制粘贴到程序里面,粘贴时需要引入,否则会报错。数据匹配上(national query)国内查询的规则后,就表示该数据是国内查询,而国内查询具有 flight type 的枚举,可以直接调用 flight type 枚举,然后将 behaviour type 的枚举引进来,代码为:RequestType(FlightTypeEnum.National,BehaviorTypeEnum. Query)

表示数据匹配上的规则是 national query,匹配后完成了反馈。现在数据确定为国内查询,还需要在前面定义一个变量,把数据返回。

定义返回的类型,代码为:

var requestType :requestType=null

并用它进行接收,先将其设置为 null 空,然后进行匹配,匹配后的结果是国内查询就会返回给它,而它就有了数据,最终再把它进行返回即可,返回最终的数据就是 requestType。现可以断定数据的业务类型,是国内的查询。遍历国内查询的完整代码为:

for(nqRule<-nqRuleList){

if (requestur1.matches(nqRule)){

requestType=RequestType(FlightTypeEnum.NationaL,BehaviorTypeEnum.Query)

}

}

  • 遍历国际查询规则

对于国际查询实现思路是一样的,这需要进行小部分改动即可,完整代码为:

for(iqRule<- iqRuleList){

if (requestur1.matches(iqRule)){

requestType=RequestType(FlightTypeEnum.InternationaL,

BehaviorTypeEnum.Query)

}

如果数据匹配国际查询的规则成功,就代表数据为 international query 业务场景。

  • 遍历国内预定规则

用 url 与多个规则匹配,与国内预定匹配成功后表示该 url 为国内预定。完整代码为:

for(nbRule<-nbRuleList){

if (requestur1.matches(nbRule)){

requestType=RequestType(FlightTypeEnum.NationaL,BehaviorTypeEnum.Book)

}

}

用数据去国际预定的规则,如果匹配成功就表示数据为国际预定。完整代码为:

for(ibRule<-ibRuleList){

if (requestur1.matches(ibRule)){

requestType=RequestType(FlightTypeEnum.NationaL,BehaviorTypeEnum.Book)

}

}

3.程序的完善:增加守护进程,true 表示继续执行

至此代码已经写入完毕,但还不完善,并不健壮。因为某些数据完成第一个判断后,就可以确定是国内查询了,没有必要进行后续的判断了,因为一条数据只能属于一个业务规则,假设已经确定为国内查询,不需要进行后续的三个循环,这时需要加一个守护进程,定义一个 var 可变数据类型 flag,使其等于 true,在 for 循环里面添加判断语句,如果 flag 等于 true 就继续执行,第一次为 true,如果匹配上了,就把 flag 改成 false,每个循环都要增添一个守护进程,咨询flag是否继续执行,true表示继续执行,false表示不再执行。如果第一个匹配成功,就让后者不执行,就让flag=false,如果为 false 则后面的 for 循环就不在执行,这样就能够实现所需的效果,如果第一个没匹配成功,flag 仍是 true,如果第二个循环匹配成功,就改为 false。还有一种情况,数据不属于这四种情况,数据没有匹配上任意一个规则,flag 仍为 true,就表示它没有匹配上任何一个规则,flight type 和 behaviour type 均属于 other。至此打标签属于国际查询、国际查询、国内预定还是国际预定的代码就已经写入完毕了。

相关文章
|
7月前
|
数据采集 数据挖掘 数据处理
数据清洗的主要步骤包括**理解数据、处理重复值、处理空缺值、处理异常值、数据标准化和数据收集
【4月更文挑战第3天】数据清洗的主要步骤包括**理解数据、处理重复值、处理空缺值、处理异常值、数据标准化和数据收集
322 2
|
13天前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
45 10
|
7月前
stata对包含协变量的模型进行缺失值多重插补分析
stata对包含协变量的模型进行缺失值多重插补分析
|
7月前
|
测试技术
数据分享|R语言回归,虚拟变量和交互项,假设检验:F检验、AIC和 BIC分析学生成绩数据附自测题(下)
数据分享|R语言回归,虚拟变量和交互项,假设检验:F检验、AIC和 BIC分析学生成绩数据附自测题
|
7月前
|
机器学习/深度学习 数据可视化
|
7月前
|
数据采集 安全 数据挖掘
【数据挖掘】属性及其类型和数据的统计描述四分位数等详解(图文解释 超详细)
【数据挖掘】属性及其类型和数据的统计描述四分位数等详解(图文解释 超详细)
491 0
|
机器学习/深度学习 算法
在对数据进行预处理时,怎样处理类别型特征?
在对数据进行预处理时,怎样处理类别型特征?
|
数据可视化
【数据篇】34 # 如何处理多元变量?
【数据篇】34 # 如何处理多元变量?
158 0
【数据篇】34 # 如何处理多元变量?
|
网络协议
复合循环指令编程及加工
复合循环指令编程及加工
复合循环指令编程及加工
|
SQL 数据采集 NoSQL
数据预处理-航线类型操作类型-读取规则到程序|学习笔记
快速学习数据预处理-航线类型操作类型-读取规则到程序
310 0
数据预处理-航线类型操作类型-读取规则到程序|学习笔记