Hive 实战之谷粒影音

一、 需求描述

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

–统计视频观看数 Top10
–统计视频类别热度 Top10
–统计视频观看数 Top20 所属类别以及类别包含的 Top20 的视频个数
–统计视频观看数 Top50 所关联视频的所属类别 Rank
–统计每个类别中的视频热度 Top10
–统计每个类别中视频流量 Top10
–统计上传视频最多的用户 Top10 以及他们上传的观看次数在前 20 视频
–统计每个类别视频观看数 Top10

二、项目

2.1 数据结构

1、视频表
在这里插入图片描述

在这里插入图片描述

2、用户表
在这里插入图片描述
在这里插入图片描述

2.2 ETL 原始数据

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

1、ETL 之 ETLUtil

/**
 * 1.过滤脏数据
 * 2.将类别字段中的空格
 * 3.替换关联视频中的分隔符
 */
public class ETLUtil {
   


    public static String etlStr(String line){
   

        //切割数据
        String[] split = line.split("\t");

        //1. 过滤脏数据
        if (split.length<9) return null;

        //2. 去掉类别字段中的空格
        split[3] = split[3].replaceAll(" ", "");

        //3.替换关联视频的分隔符
        StringBuffer sb = new StringBuffer();

        for (int i=0; i < split.length; i++) {
   
            if (i < 9) {
   
                if (i==split.length - 1){
   
                    sb.append(split[i]);
                }else {
   
                    sb.append(split[i]).append("\t");
                }
            }else {
   
                if (i==split.length - 1){
   
                    sb.append(split[i]);
                }else {
   
                    sb.append(split[i]).append("&");
                }
            }


        }

        return sb.toString();
    }

}

2、ETL 之 Mapper

package com.atlxl;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @author LXL
 * @create 2019-06-05 21:26
 */
public class ETlMapper extends Mapper<LongWritable, Text, Text, NullWritable> {
   


    private Text k = new Text();


    @Override
    protected void map(LongWritable key, Text value, Context context
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值