大数据系列 | Hive实战影音数据分析

1、Hive实战之影音数据分析

需求描述

统计影音视频网站的常规指标,各种TopN指标:

–统计视频观看数Top10

–统计视频类别热度Top10

–统计视频观看数Top20所属类别

–统计视频观看数Top50所关联视频的所属类别Rank

–统计每个类别中的视频热度Top10

–统计每个类别中视频流量Top10

–统计上传视频最多的用户Top10以及他们上传的视频

–统计每个类别视频观看数Top10

1.2、项目

1.2.1、数据结构

1.视频表

字段 备注 详细描述
video id 视频唯一id(String) 11位字符串
uploader 视频上传者(String) 上传视频的用户名String
age 视频年龄(int) 视频在平台上的整数天
category 视频类别(Array) 上传视频指定的视频分类
length 视频长度(Int) 整形数字标识的视频长度
views 观看次数(Int) 视频被浏览的次数
rate 视频评分(Double) 满分5分
Ratings 流量(Int) 视频的流量,整型数字
conments 评论数(Int) 一个视频的整数评论数
related ids 相关视频id(Array) 相关视频的id,最多20个

2.用户表

字段 备注 字段类型
uploader 上传者用户名 string
videos 上传视频数 int
friends 朋友数量 int

1.2.2、准备数据

数据链接(需要自取)

#在HDFS上创建project目录
hdfs dfs -mkdir /cj_project

#创建user、video目录
hdfs dfs -mkdir /cj_project/user
hdfs dfs -mkdir /cj_project/video
    
#上传数据,数据已经放在了虚拟机目录下
hdfs dfs -put user.txt  /cj_project/user
hdfs dfs -put ./*  /cj_project/video

user和video数据源上传到HDFS上之后:
在这里插入图片描述

video数据源上传到HDFS上之后:
在这里插入图片描述

1.2.3、ETL原始数据

通过观察video原始数据形式,可以发现,视频可以有多个所属分类,每个所属分类用&符号分割,且分割的两边有空格字符,同时相关视频也是可以有多个元素,多个相关视频又用“\t”进行分割。为了分析数据时方便对存在多个子元素的数据进行操作,我们首先进行数据重组清洗操作。即:将所有的类别用“&”分割,同时去掉两边空格,多个相关视频id也使用“&”进行分割。

注:以下是对video数据进行清洗

1.ETL之ETLUtil

public class ETLUtil {
   
	public static String oriString2ETLString(String ori){
   
		StringBuilder etlString = new StringBuilder();
		String[] splits = ori.split("\t");
		if(splits.length < 9) return null;
		splits[3] = splits[3].replace(" ", "");
		for(int i = 0; i < splits.length; i++){
   
			if(i < 9){
   
				if(i == splits.length - 1){
   
					etlString.append(splits[i]);					
				}else{
   
					etlString.append(splits[i] + "\t");	
				}
			}else{
   
				if(i == splits.length - 1){
   
					etlString.append(splits[i]);
				}else{
   
					etlString.append(splits[i] + "&");
				}
			}
		}	
		return etlString.toString();
	}
}

2.ETL之Mapper

import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import com.sihe.util.ETLUtil;

public class VideoETLMapper extends Mapper<Object, Text, NullWritable, Text>{
   
	Text text &#
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值