开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop 框架搭建)第三阶段):数据预处理-航线类型操作类型实现详细思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/671/detail/11653
数据预处理-航线类型操作类型实现详细思路
内容介绍:
一、概述
二、具体目的及详细思路
一、概述
前面已经将思路理清,了解了要实现飞行类型与操作类型的目标与基本思路。接下来进行详细思路的梳理。详细思路会涉及到数据库的读取,下面继续完整地进行读取数据库后的更新、处理等操作流程,这是第二次的完整操作,后续再遇到类似的从数据库里面读取时就不在进行完整的学习了。
二、具体目的及详细思路
1. 目的
确定一条数据的业务场景,根据数据库中配置的规则(四种)确定规则。
2.实现思路
解析出的 url 与四种规则进行匹配,这个 url 匹配与哪个规则匹配成功,表示这个数据属于哪个规则类型。
3.四种情况
国内查询(0-0)国内预定(0-1)国际查询(1-0)国际预定(1-1)
4.具体实现思路
(1)读取数据分类规则,是从数据库中 itcast_classify_rule 分类数据规则表中读取的。四种规则,每种单独读取到预处理程序。不能一次性全部混入读取,这样无法确定到底是哪种业务场景。在查询时要确定字段expression from itcast_classify_rule where(条件)等于什么,例如 flight_type 和 operation_type 均是0,表示国内查询,确定现需要将国内查询读取出来,所以把 flight_type 和 operation_type 均等于0的全部读取出来,而要计算国内预定时要将 flight_type=0、operation_type=1的全部读取出来。即四种情况分别查询出来,每一个规则单独读取到程序里。
(2)将数据分类规则加载到广播变量,因为要让其它的节点都可以访问到。
(3)在 redis 内添加是否需要更新数据分类规则的标识,每批次都从 redis 中读取这个标识,判断是否需要更新数据分类规则
(4)若不需要更新,那么直接执行分类操作;
若需要更新,那么在数据库中重新读取新的分类规则到程序中,所以读取数据库的操作可以单独写一个方法,方便直接调用。重新读取后将广播站清空,再把新的规则加载到广播里,然后把是否需要更新分类规则的标记改成 false,改完后数据就读取过来了。
(5)分类
1.定义方法,参数为经过拆分后的 URL 和分类的广播变量规则,即 URL 和四种变量规则都要放入方法中,这个方法会在后续课程中完成代码的书写。
2.先在分类的广播变量中获取四种业务场景的规则
3.遍历四种规则与数据进行匹配,数据与哪种匹配成功,表示这个数据就是这种类型,最终返回类型最终返回类型(国内查询国内预定国际查询国际预定)
因为前面的四种业务场景获取过来后放到广播变量中去了,拿到广播变量里面的数据后,先把这四种场景的数据规则单独的拆分出来,然后再分别遍历四种规则当中的数据与 url 进行匹配。如果数据与四个规则当中的任何一个匹配成功,表示该数据就属于该业务场景,最终返回类型,即国内查询、国际查询、国内预定和国际预定。