spark学习笔记2(使用spark Sql进行离线数据分析项目)
网站日志分析实战.项目
一、 用户行为日志概述
1. 用户访问、浏览、搜索、点击等行为都会被记录在网站的服务器上。
2. 用户的访问信息主要包括如下内容:
(1)系统属性。(操作系统、浏览器)
(2)点击的 url, 从什么 url 跳转过来
(3) 用户的sessionId 、ip
3. 意义
(1)网站的眼睛
用于优化网站布局,用户网站的推广决策
二、离线数据处理流程
1. 数据采集、 (flume、logstash)
将数据从网站的 sever 写到 HDFS
2. 数据清洗 (主要有spark、hive、 MapReduce)
清洗完之后将数据放在HDFS.
3.数据处理(spark、storm、MapReduce)
按照我们的业务需求处理数据.
4.数据的处理结果入库
结果存在 RDBMS或者 NoSql数据库中
5.数据的可视化展示(ECharts、阿里云的DataV)
三、项目需求
需求一:统计主站最受欢迎的课程、手记的Top N,并以饼图的形式展示
需求二:按照地市统计主站最受欢迎的 Top N
需求三:按照流量统计主站最受欢迎的课程
四、日志清洗
1. 原始日志格式
ip time http协议 code 流量 url 其他
2. 清洗过后的日志格式
ip time 流量 url
3、使用 spark SQL 解析访问日志.
4. 解析课程编号和类型
5 .根据ip解析城市信息
6. 使用 spark SQL 将访问时间按天进行分区输出
五、数据处理(统计一天视频课程的topN)
1. 读取清洗后的日志文件
RDD=spark.context.textFile(parquetFilePath)
logDF = spark.createDataFrame(RDD, AccessConvertUtil.structType) //将RDD转换为DataFrame
2. 定义一个 AccessConvertUtil 类:用于将RDD转换为需要的RDD格式{
(1)structType
(2)parslog()
3. 根据中解析城市信息
(1) git hub ip database 项目拉取.
(2) 编译。
(3) 安装 jar 到自0项目 mm install
(4) 添加 pom 的依赖
3.将清洗的结果写到parquet文件
logDF.write(). format(“parquet") .partition('' day").save ("path")
4.按照需求完成统计信息
(1)读取 parquet 数据
(2) videoAccessTopNStastic(){
a 按天和视频进行过滤
b 使用groupby按照天和视频编号进行分组
c 使用agg(count(cmsId))进行聚合统计
d 按照降序进行排序
}
5. 将统计的结果插入到mysql数据库
(1)定义MysqlUtils工具类,用户获取mysql连接和释放资源
(2)定义实体类,用于指定mysql数据库的字段
(3)开发DAO类
a 注意使用批量插入
(4)使用DataFram的foreachPartition()算子将统计结果写入到mysql数据库
六、按照城市进行结果统计(和第五点类似)
...