文章      动态     相关文章     最新文章     手机版动态     相关动态     |   首页|会员中心|保存桌面|手机浏览

8q1t6k

http://keair.bhha.com.cn/com8q1t6k/

在这里插入图片描述
在这里插入图片描述

  1. 查询字段 et 的值

在这里插入图片描述

  1. 导入 spark sql 相关工具包
  1. 提取 et 中键 ett , en , kv 的值,放入到array集合中,将整个ArrayType类型的字段重命名为 events

在这里插入图片描述
在这里插入图片描述

spark中,一个StructType对象,可以有多个StructField,同时也可以用名字(name)来提取,就想当于Map可以用key来提取value,但是他StructType提取的是整条字段的信息
在源码中structType是一个case class,如下

它是继承Seq的,也就是说Seq的操作,它都拥有,但是从形式上来说,每个元素是用 StructField包住的

语法:(false表示字段可以为空)

  1. 使用 explode 函数将 events 展开

字段 events 中原先包含两行数据,即两条日志数据 etArrayType 类型集合,每个集合中又含有5个元素,使用 explode 将每个集合展开,实现 列转行,这样展开后的每条数据合并之前查询的 id , cm(cm中每一个键已单独展开) , ap ,可以使整张表的 结构扁平化

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 分别查询 events 中所包含的三个属性 ett , en , kv,将 events 一分为三 结构更加扁平化

在这里插入图片描述

在这里插入图片描述

  1. opJsonObj5 中的数据加载到临时表中
  1. 查询表数据
相关列表
文章列表
  • 暂无文章
推荐文章
联系方式
  • 联系人:李女士
  • 电话:18701102165
spark日志分析(三)—— 手机行为日志op手机「spark日志分析(三)—— 手机行为日志」
发布时间:2025-01-12        浏览次数:0        返回列表

样例分析使用的是两条手机用户产生的日志信息op.log
内容如下


 

在这里插入图片描述


初步分析可知,日志整体并不是一个 json 的格式文件,每条日志可分为两部分1593136280858 | {json} ,使用 split("|") 切分,然后对日志主体 json 格式内容分析

日志中有部分乱码,但不影响分析,此处不做处理

这里推荐一个网站: https://www.json.cn/

取第一条数据 json 部分主体内容,复制粘贴,可以帮助快速精准的分析 json 的结构内容

如下如,可以看到主体 json 格式内容分为三部分cm , ap , et
在这里插入图片描述
再对 cm , ap , et 分别进行展开


展开 cm

在这里插入图片描述


展开 ap ,只有一个键值对

 

展开 et

在这里插入图片描述
et 中又包含了5个 json串 ,每个 json串中有三个键值对ett , en , kv

et 内容如下所示

 

分析可知 kv 中 主体内容长度格式并不一致,这里对 kv 不做进一步展开操作


表结构如下图所示
在这里插入图片描述

  1. hdfs创建目录 /app/data/,将日志数据 op.log 上传至该目录
 
  1. 将数据加载至RDD
 
  1. 切片,提取json格式内容

考虑到每一行的初始 id 编号可能也很重要,此处将id编号也作为json格式键值对形式 { " id " : “1593136280858” } 替换插入到json主体内容中

 

这里说明一下 replaceFirst() 中匹配替换的内容
replaceFirst(str1, str2) 是将匹配到的第一个字符串 str1 替换成 str2
放到代码中的本意是将 中第一个 替换为 ,这样将日志开头的编号作为 id 放入到 json主体内容中 ,切片时即可保留编号
需要说明的是 中的反斜杠 都是表示转义

  • 第一个参数 中有两个反斜杠是因为匹配 需要一个 转义,此时就是 ,放到字符窜中是这样的 ,但是 java 语言中 真实存在的话也是需要转义符的,这时就需要再加一个反斜杠来转义原先的反斜杠 , 所以此处有两个反斜杠
  • 第二个参数 ,其中 表示的是一个字符串, 表示的是一个字符串,用变量 +x._1+ 连接,变量 x._1 是指编号id 1593136280858
  1. RDD 转换成 Dataframe
 
  1. 打印 Schema 信息
 

没有指定头信息,默认为value,为string类型,但它的值是json串
在这里插入图片描述

  1. 查看数据
 

在这里插入图片描述

7.获取json主体内容中四个键 id , cm , ap , et 的值

使用 get_json_object(column A, A.key) 方法,如果 dataframe 中字段 A 的值为 json串 , 那么该方法可以获取字段 A 中某一个键 key 的所包含的值

 

在这里插入图片描述

在这里插入图片描述

  1. 继续使用 get_json_object(column A, A.key) 方法, 将 cm 展开,获取其中每一个键ln,sv,os,g,mid… 的值
lnsvosgmidnvlvchwaruidtlamdvnbasr
“-55.0”“V2.9.6”“8.0.4”“C6819QZ0@mail.com”“489”“3G”“es”4640*960“MX”“489”“1593123253541”“5.2”“sumsung-18”“1.3.4”“Sunsung”