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

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

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

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


数据预处理-封装ProcessedData下


内容介绍:

一、封装 ProcessedData

二、总结


一、封装 ProcessedData

image.png

流程中进行结构化,接下来进行数据推送,将数据推送到 Kafka 中,推送模块做数据推送工作

image.png

推送数据到 Kafka 中,数据与数据用#CS#进行拼接

image.png

所看到的数据都是逗号的

数据结构化之后将数据推送到 Kafka 中

结果显示的数据是空格的、逗号拼接的、有空数据的

原因是有一段代码为读取

进入 ProcessedData 中,之前将下方数据传入、封装

case class ProcessedData(sourceData: string,requestwethod: string,request: string,

remoteAddr: string,httpUserAgent: string, timeIso8601: string,

serverAddr: string, highFrqIPGroup: Boolean,

requestType: RequestType,travelType: TravelTypeEnum,requestParams: CoreRequestParams, cookievalue_JSESSIONID: string, cookievalue_USERID:string,queryRequestData: option[ QueryRequestData], bookRequestData: option[BookRequestData],httpReferrer: string) {

ProcessedData

往下查看

toKafkaString 方法,有一个默认参数#CS#

def toKafkastring(fieldseparator: string = ""cs#"): string ={

数据采集完,将数据按照#CS#进行拼接

image.png

两个数据之间用#CS#进行拼接,拼接完成后打入 Kafka 中,消息对接 Kafka 集群中是#CS#拼接的,数据结构化后数据推送也要将数据打入 Kafka 中,也需要#CS#进行拼接

提供 toKafkaString 方法,将上方参数每两个之间用#CS#进行拼接,fieldseparator 是一个默认参数,

//_0-原始数据

sourceData.repEmptystr()+fieldSeparator+

//_1-请求类型GET/POST

requestMethod.repEmptystr()+fieldseparator+

//_2-请求http://xxxxx

request.repEmptystr()+ fieldseparator+

//_3-客户端地址(IP)

remoteAddr.repEmptystr()+fieldseparator+

//_4-客户端浏览器(UA)

httpUserAgent.repEmptystr()+fieldseparator+

//_5-服务器时间的ISO 8610格式

timeIso8601.repEmptystr()+fieldseparator+

//_6-服务器地址

serverAddr.repEmptystr()+fieldSeparator+

//_7-是否属于高频IP段

highFrqIPGroup+fieldSeparator+

//_8-航班类型-National/International/other

requestType.flightType+fieldSeparator+

//_9-消求行为-Query/Book/other

requestType.behaviorType+fieldseparator+

//_10-行程类型-OneWay/RoundTrip/Unknown

travelType+fieldseparator+

//_11-航班日期 -requestParams.flightDate.repEmptystr()

+fieldseparator

//_12-始发地 -

requestParams.depcity.repEmptystr()+fieldseparator+

//13-目的地 -

requestParams.arrcity.repEmptystr(()+fieldseparator+

//14-关键cookie-JSESSIONID

cookieValue JSESSIONID.repEmptystr()+fieldseparator+

//15-关键Cookie-用户ID

cookieValue USERID.repEmptystr()+fieldseparator+

//16-解析的查询参数对象JSON

aueryReauestDatastr.repEmptystr()+fieldseparator+

//17-解析的购票参数对象JSON

bookRequestDataStr.repEmptystr()+fieldseparator+

//18-当前请求是从哪个请求跳转过来的 httpReferrer.repEmptystr()

}

}

里面全部都是#CS#,字段、变量就是#CS#,sourceData是第一个数据,repEmptyStr是StringUtils,implicit隐式转换

implicitclass stringutils(s: string) {

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

if (s.isEmpty) replacement else s

}

}

调用 repEmptyStr 方法时,在 repEmptyStr 调用,调用隐式转换,传入一个参数,默认 NULL,调用隐式转换,如果数据是空的,返回 NULL,如果不是空的,是什么就返回什么,在调用sourceData时,如果是空,返回 NULL,不是空是什么就返回什么,即原始数据是空的返回 NULL,加一个#CS#

如果 requestMethod 是空的,替换成 NULL,不是空的是什么就返回什么,拼接一个#CS#,依次到最后都是这样将前面传递的参数判断是否为空,如果是空,则返回 NULL,不是空的是什么就返回什么,两个字段用#CS#拼接,方法的调用称为 toKafkaString

查看效果

之前返回的是 processedData,调用 toKafkaString

processedData.toKafkaString()


执行出现#CS#拼image.png

解析 processedData 调用 toKafkaString,转化成可以推动到 Kafka 中的数据类型

NULL 是因为,前面给的数据是空 str=””

将数据结构化的代码全部读取完成


二、总结

1.目标

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

2.思路与关键代码

(1)根据 ProcessedData 所需的参数,提供参数,准备数据

(2)参数中缺少 requestParams: CoreRequestParams,此参数需要使用经过解析后的数据(出发地、目的地、起飞时间)进行封装

封装之前解析三个数据

var depcity=""

var arrcity =""

var flightDate=""

//在查询解析后的数据中抽取出出发地、目的地、起飞时间queryRequestData match {

case Some(datas)=>

depcity=datas.depCity

arrcity=datas.arrCity

flightDate=datas.flightDate

case None=>

}

解析三个数据,封装核心解析参数

实际最终代码,封装

val requestParams:CoreRequestParams=CoreRequestParams(

flightDate ,depcity,arrcity)

(3)封装好 CoreRequestParams 后所有参数就绪,封装 ProcessedData,并返回processedData("",requestMethod requestUr1,remoteAddr,httpUserAgent,timeiso8601,serverAddr,isFreIP,requestType,travelType,requestPar ams , cookievalue_SESSIONID,cookievalue_USERID, queryRequestData,

bookRequestData,httpReferrer)

(4)ProcessedData 内的 toKafkaString 方法将每个属性之间使用"#CS#"进行拼接,最终形成一个字符串

processedData.toKafkaString()

第一步根据所需要的参数准备数据,第二部数据准备后缺少参数,分析核心解析参数,在查询解析后的数据中抽取出出发地、目的地、起飞时间,对出发地、目的地、起飞时间进行封装,分装 ProcessedData 所有参数,使用toKafkaString 方法拿到用#CS#拼接的数据,以上即为数据结构化的过程。

相关文章
|
5月前
|
机器学习/深度学习 数据可视化 算法
数据处理方法—— 7 种数据降维操作 !!
数据处理方法—— 7 种数据降维操作 !!
186 0
|
5月前
|
数据采集 JSON 数据挖掘
如何利用Python实现高效数据清洗
数据清洗是数据分析过程中不可避免的一步。在大规模数据处理任务中,手动数据清洗会耗费大量时间和资源。本文介绍了如何使用Python编写脚本来自动化数据清洗,以提高数据分析的效率。
95 3
|
3月前
|
机器学习/深度学习 数据采集 数据处理
重构数据处理流程:Pandas与NumPy高级特性在机器学习前的优化
【7月更文挑战第14天】在数据科学中,Pandas和NumPy是数据处理的关键,用于清洗、转换和计算。用`pip install pandas numpy`安装后,Pandas的`read_csv`读取数据,`fillna`处理缺失值,`drop`删除列。Pandas的`apply`、`groupby`和`merge`执行复杂转换。NumPy加速数值计算,如`square`进行向量化操作,`dot`做矩阵乘法。结合两者优化数据预处理,提升模型训练效率和效果。
49 1
|
4月前
|
机器学习/深度学习 数据采集 算法
特征工程与数据预处理全解析:基础技术和代码示例
在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常值、缺失值、编码、特征缩放和特征提取的各种技术。
71 0
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
利用Python实现高效的数据清洗与预处理流程
本文旨在探讨如何使用Python编程语言及其强大的数据处理库(如pandas、numpy等)来构建一个高效且灵活的数据清洗与预处理流程。与常规的数据清洗方法不同,本文不仅关注于传统的缺失值填充、异常值处理、数据类型转换等步骤,还引入了数据质量评估、数据特征选择以及自动化处理流程的设计等高级主题。通过实际案例和代码演示,本文将为读者提供一套完整的数据清洗与预处理解决方案,助力数据分析师和数据科学家在数据探索阶段更加高效、准确地处理数据。
|
5月前
|
数据采集 数据可视化 数据挖掘
使用Python实现高效的数据清洗和预处理
数据清洗和预处理是数据分析和挖掘中必不可少的步骤。然而,由于数据来源复杂多样,常常存在缺失、异常、重复等问题,传统的手动处理方式效率低下。本文介绍了如何使用Python编程语言实现高效的数据清洗和预处理,帮助数据分析师和开发者更快速地完成数据处理工作。
|
5月前
|
机器学习/深度学习 数据可视化 算法框架/工具
基于Python的神经网络模型结构框架可视化绘图简便方法
基于Python的神经网络模型结构框架可视化绘图简便方法
158 1
|
数据挖掘 数据库 Windows
R语言之数据获取操作
R语言之数据获取操作
190 0
|
数据采集 机器学习/深度学习 数据挖掘
数据预处理是干什么的?底层原理是什么?
数据预处理是干什么的?底层原理是什么?
350 0
|
数据采集 大数据 数据处理
数据预处理-封装 ProcessedData 上|学习笔记
快速学习数据预处理-封装 ProcessedData 上
196 0
数据预处理-封装 ProcessedData 上|学习笔记