🙆♂️🙆♂️ 写在前面
🏠 个人主页:csdn春和
📚 推荐专栏:更多专栏尽在主页!
JavaWeb专栏(从入门到实战超详细!!!)
SSM专栏 (更新中…)
📖 本期文章:Hive实战 —— 利用Hive进行数据分析并将分析好的数据导出到mysql数据库中
如果对您有帮助还请三连支持,定会一 一回访!🙋🏻♂️
📌本文目录
📍 写在前面
本次文章记录自己的一次实验过程,详细实验请参考尚硅谷的Hive教程
hive实战
一、需求分析
统计热门视频Top10 (以播放数作为参考标准) 简单需求
将统计结果导出到mysql中
✔️ 目的为了熟悉各种操作过程
二、数据准备
2.1、查看原始数据
2.2、表的数据结构
字段 | 备注 | 详细描述 |
---|---|---|
videoId | 视频唯一id(String) | 11位字符串 |
uploader | 视频上传者(String) | 上传视频的用户名String |
age | 视频年龄(int) | 视频在平台上的整数天 |
category | 视频类别(Array) | 上传视频指定的视频分类 |
length | 视频长度(Int) | 整形数字标识的视频长度 |
views | 观看次数(Int) | 视频被浏览的次数 |
rate | 视频评分(Double) | 满分5分 |
Ratings | 流量(Int) | 视频的流量,整型数字 |
conments | 评论数(Int) | 一个视频的整数评论数 |
relatedId | 相关视频id(Array) | 相关视频的id,最多20个 |
2.3、数据清洗
通过观察原始数据形式,可以发现,视频可以有多个所属分类,每个所属分类用&符号分割,且分割的两边有空格字符,同时相关视频也是可以有多个相关视频,多个相关视频又用“\t”进行分割。为了分析数据时方便对存在多个子元素的数据进行操作,我们首先进行数据重组清洗操作。
即:
将所有的类别用“&”分割,同时去掉两边空格,多个相关视频id也使用“&”进行分割。
我们使用过MapReduce进行数据清理
新建一个module 导入依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
</dependencies>
【1】封装工具类
package com.itch.video.etl;
/**
* @author it春和
* @create 2022-05-09 22:29
*/
public class EtlUtils {
// 工具类
/**
* 数据清洗的方法
* @param srcData 原始数据
* @return
*/
public static String etlData(String srcData){
StringBuffer resultData = new StringBuffer();
//1. 先将数据通过\t 切割
String[] datas = srcData.split("\t");
//2. 判断长度是否小于9
if(datas.length <9){
return null ;
}
//3. 将数据中的视频类别的空格去掉
datas[3]=datas[3].replaceAll(" ",""); // 将所有空格替换成空串
//4. 将数据中的关联视频id通过&拼接
for (int i =