数据预处理-封装 ProcessedData 上|学习笔记

简介: 快速学习数据预处理-封装 ProcessedData 上

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

课程地址:https://developer.aliyun.com/learning/course/672/detail/11667


数据预处理-封装 ProcessedData 上


数据结构化

image.png

历史爬虫判断结束以后进入到数据结构化过程

1、目标

将经过拆分的数据和与前面计算出来的各个指标(国内查询、国际预定、单程、往返、解析出的数据、是否是历史爬虫)封装成 ProcessedData

拆分后的数据实际上是 split 的,把数据拆分以及用拆分出来的数据去计算出来指标,Request type、 travel type、预定的数据、查询类的解析数据和预订类的解析数据以及是否是高频 IT,也是是否在历史的爬虫中出现过。封装模块将前面的解析拆出来的数据和封装出来的数据封装成 ProcessedData

2、需求

将数据按照 ProcessedData 格式封装,后期会将数据处理后的最终结果 ProcessedData 发送 kafka 供后续 rulecompute 业务进行处理

image.png

打开 common-bean- ProcessedData 

*requesttype:请求类型 travelType:往返类型

*requestParams:核心请求参数,飞行时间、目的地、出发地

*cookieValue JSESSIONID:cookie 中的 jessionid

* cookieValue USERID:cookie 中的 userid

*queryRequestData:查询请求的 form 数据

*bookRequestData:预定请求的 body 数据

*httpReferrer: refer

*/

保存结构化数据

case class ProcessedData(sourceData: String,requestMethod: String, request: string,

remoteAddr:String,httpUserAgent:String,timeIso8601:string, serverAddr:string,highFrqiPGroup:Boolean,

requestType:RequestType,travelType:TravelTypeEnum,

requestParams:CoreRequestParams,cookieValue JSESSIONID:StringcookieValue USERID: String

queryRequestData:Option[QueryRequestData],bookRequest DataOption[BookRequestData],

httpReferrer: String){

//用 null 替换空数据

implicit class stringutils(s: string){

def repEmptystr(replacement:String ="NULL"):string = {

if(s.isEmpty)replacement else s

}

}

case class 是样例类,里面很多的参数,ProcessDatad 是数据预处理阶段也是蓝色的部分,最终需要封装的结果,把里面所需要用到的参数全部提供出来封装 ProcessDatad,数据预处理基本就做完了分析操作就做完了。封装需要用到很多的参数,实际上大部分现在已经有了,把数据传进来。

3、代码

//8 数据结构化

DataPackage.dataPackage()

新建数据预处理的 businessprocess Scala object

image.png

package com.air.antispider.stream.dataprocess.businessproc ess

//用于实现数据非封装封装成ProcessedData

object DataPackage {

}

数据和计算数据包装成 ProcessedData,然后 process 的格式所需要的参数有一部分有一部分没有,在方法里面去封装,拆分出来的数据都在这,而前面计算出来的各个指标数据也都在这里,把这些数据都传递到里面来去封装 ProcessedData,顺序按照它来,所以既然要数据而且要顺序,里面现在数据基本都有,就按照顺序直接复制粘贴,删掉 String 类型。

//8 数据结构化

DataPackage.dataPackage()

“”, requestMethod, requestUrl,

remoteAddr,httpUserAgent,timeIso8601,

serverAddr, IsfreIP,

requestType, travelType,

cookieValue JSESSIONID,cookieValue USERID

queryRequestData,bookRequestData,

httpReferrer

sourceData 没有,process 对着里面,sourceData 指的是请求的原始数据,原始数据是我一个循环里面的 message,或者经过手机号码脱敏以后的数据是原始数据。虽然要原始数据但是先不给,做一个预留字段,先给个空如果后面有业务需求,真的需要原始数据,再传过来,如果不需要先给个空做预留。

然后 requestMethod 现在有拆分方法,request 想要的数据是真正的数据当中的 url。

有高频 IP 的组,实际上是刚刚计算出来的也是历史爬虫数据,是不是历史爬虫中出现,也是高频 IP 里面直接切过来把它替换掉。

requestParams 的数据类型是一个核心的请求参数,实际上在ProcessedData scholar 的文件中:

//封装请求类型:航线类别(0-国内,1-国际,-1-其他)和操作类别(0-查询,1-预定,-1-其他)

case class RequestType(flightType:FlightTypeEnum,behavior Type:BehaviorTypeEnum)

用于封装核心请求信息:飞行时间、出发地、目的地,

case class CoreRequestParams(flightDate: String,depcity: Stri ng, arrcity: String)

拖到最后有核心的请求参数也是一个样例,需要用到起飞时间、出发地和目的地来解析。出发时间、出发地和目的地封装出来的核心请求参数前面没有用到,先删掉,删掉以后在封装 ProcessDate 里面,现在缺少一个核心的请求参数,缺少 requestParams 缺的在 data package 里面来实现,添加进来就可以,然后在 package 里面封装 ProcessedData。

//6 数据的解析

//6-1 查询类数据的解析

//1前面

//2前面

//3对数据进行解析(在多种解析规则的情况下,确定最终使用哪一个规则进行解析)

val queryRequestData =AnalyzeRequest.analyzeQueryRequest (requestType,requestMethod,contentType

requesturl,requestBody,travelTypebroadcastQueryRulesvalue)

val data=queryRequestData match{

case Some(datas)=> datas.flightDate

data

//6-2 预定类数据的解析

val bookRequestData =AnalyzeBookRequest.analyzeBokReq uest(requestType,requestMethod,

contentType,requestUrlrequestBody,travelType,broadcastBookRules.value)

//7 历史爬虫判断

//1

//2

//3将数据中的 ip 与历史出现过的黑名单 IP 数据进行对比,判断是否相等

Ipoperation.isFreIP(remoteAddr,broadcastBlackIpList.value)

//4若有任意一个是相等的返回 true,反之返回 false

//8 数据结构化

DataPackage.dataPackage("",requestMethod,requestUrl,remoteAddr, httpUserAgent, timeIso8601,serverAddr, isFreIP,reque stType,travelTypecookieValue_JSESSIONID,cookievalue USER ID,queryRequestData, bookRequestData,httpReferrer)

创建方法:

package com.air.antispider.stream.dataprocess.businessproc ess

import com.air.antispider.stream.commonbean{BookReuestD ataQueryRequestData,RequestType

import com.air.antispiderstream.dataprocess.constantsTrave lTypeEnum.TravelTypeEnum

//用于实现数据非封装封装成

ProcessedData object DataPackage {

//封装ProcessedDatadef dataPackage(str: String,requestMethod:String,requestur l:String,remoteAddr: String,httpUserAgent: StringtimeIso8601:stringserverAddr:stringisFreIp:BooleanrequestType:Reque stType, travelType: TravelTypeEnumcookieValue JSESSIONID: StringcookieValueUSERID:StringqueryRequestData:Option[QueryRequestDatal,bookRequestData:OptionBookRequestDa tal, httpReferrer:String):Unit ={

假设封装完以后,把前面准备好的参数直接复制过来,然后粘到里面,爆红的原因是缺少核心的请求参数。假设核心参数已经有了以后把它引进来,让后面封装 process 不报错,在 Travel type 的后面和 cookie 的前面,找到相应的位置,然后把封装添加进来以后就不报错。然后让它在代码的最后一行返回来,把封装好的 ProcessData 返回,只不过现在核心的请求参数还没有,接下来就来封装。

def dataPackage(str: String,requestMethod:String,requestur l:String,remoteAddr: String,httpUserAgent: StringtimeIso8601: string,serverAddr:string,isFreIp:BooleanrequestType:Reque stType, travelType: TravelTypeEnumcookieValue JSESSIONID: StringcookieValue USERID: String queryRequestData:Option[Q ueryRequestDatal,bookRequestData:OptionBookRequestDa tal, httpReferrer:String) ={

//封装reauestParams:CoreReauestParams

val requestParams:CoreRequestParamsProcessedData("", requestMethod,requestUrl,remoteAddr,httpUserAgent,timeIso8601,serverAddr, isFreIP requestType,travelTyperequestparam scookieValue JSESSIONID,cookieValue USERIDqueryRequestDa ta bookRequestData,httpReferrer)

}

}

相关文章
|
1月前
|
机器学习/深度学习 数据可视化 算法
数据处理方法—— 7 种数据降维操作 !!
数据处理方法—— 7 种数据降维操作 !!
76 0
|
1月前
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
|
1月前
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
什么是大模型?了解大模型的基本概念
大模型是具有大规模参数和复杂计算结构的机器学习模型,常由深度神经网络构建,用于处理如自然语言处理、计算机视觉等复杂任务。与小模型相比,大模型有更强的表达能力和准确性,但需要更多计算资源。大模型的发展经历了从传统神经网络到Transformer架构的演变,如GPT和BERT等,近年来以ChatGPT为代表的大模型在交互式对话和内容生成方面取得了重大突破。大模型的特点包括大规模、涌现能力、高性能和泛化能力,以及在多任务学习、自动化和跨领域应用中的优势。根据输入数据类型和应用领域,大模型可分为语言、视觉和多模态等类别,并通过微调适应特定任务。
|
9月前
|
机器学习/深度学习 TensorFlow API
机器学习PAI简单实现
机器学习PAI简单实现
188 0
|
10月前
|
数据挖掘 数据库 Windows
R语言之数据获取操作
R语言之数据获取操作
168 0
|
机器学习/深度学习 数据采集 移动开发
机器学习:盘点最常见的7种数据预处理方法和原理
机器学习:盘点最常见的7种数据预处理方法和原理
1764 0
机器学习:盘点最常见的7种数据预处理方法和原理
|
数据采集 机器学习/深度学习 数据挖掘
数据预处理是干什么的?底层原理是什么?
数据预处理是干什么的?底层原理是什么?
309 0
|
机器学习/深度学习 算法 数据可视化
机器学习基础——k-近邻算法概述和简单实现
本章介绍第一个机器学习算法:k-近邻算法,它非常有效而且易于掌握。首先,我们将探讨k-近邻算法的基本理论,以及如何使用距离测量的方法分类物品;其次我们将使用Python从文本文件中导人并解析数据。
159 0
机器学习基础——k-近邻算法概述和简单实现
|
消息中间件 数据采集 JSON
数据预处理-封装ProcessedData下|学习笔记
快速学习数据预处理-封装ProcessedData下
118 0
数据预处理-封装ProcessedData下|学习笔记