1 需求说明
1.1 清洗过滤
1)去除json数据体中的废弃字段(这是前端开发人员在埋点设计方案变更后遗留的无用字段):
"email"
"phoneNbr"
"birthday"
"isRegistered"
"isLogin"
"addr"
"gender"
2)过滤掉日志中: uid | imei | uuid | mac |androidId | ip全为空的记录!
3)过滤掉日志中缺少关键字段(event/eventid/sessionid 缺任何一个都不行)的记录!
4)过滤掉json格式不正确的(脏数据)!
1.2 数据解析
将json打平: 解析成扁平格式;
![e2dce3b631d75bd2ff5e28c76249da0a.png](https://img-blog.csdnimg.cn/img_convert/e2dce3b631d75bd2ff5e28c76249da0a.png)
注: event字段不用扁平化;转成Map类型存储即可
1.3 数据集成
1)将日志中的GPS经纬度坐标解析成省、市、县(区)信息;(为了方便后续的地域维度分析)
2)集成商圈信息;(为了方便后续的地域维度分析)
1.4 数据修正
1)guid回补
2)字段名称规范化
比如app日志中pgid,wxapp中这个字段叫pageid,和web端日志中的page,统一成pageid
3)字段度量规范化
比如时间戳统一用秒级
4)字段类型规范化
比如时间戳统一用长整型
1.5 保存结果
最后,将数据输出为parquet格式,压缩编码用snappy
![bfbbf76983bae2ab23662225c6a8f81d.png](https://img-blog.csdnimg.cn/img_convert/bfbbf76983bae2ab23662225c6a8f81d.png)
2 预处理开发实现
2.1 整体流程
1)json解析,解析成功的返回LogBean对象,解析失败的返回null
(这样一来,json格式不对、不完整的脏数据就被识别出来了)
2)对上一步结果RDD[LogBean]进行过滤(清掉json不完整的脏数据,清掉不符合规则的数据)
3)数据修正(回补uid,统一命名规范、度量单位规范等)
4)对数据进行字典知识集成
5)从集成后的结果中跳出无法解析的gps,写入一个待解析目录
6)输出最终结果保存为parquet(或ORC)文件
3.2 完整代码
case class定义:
case class AppLogBean(
var guid:Long,
eventid: String,
event: Map[String, String],
uid: String,
imei: String,