栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ETL实战项目之APP热点标签分析复盘

ETL实战项目之APP热点标签分析复盘

一.项目介绍 1.需求分析

将给定数据的app的标签进行一个热度排序
数据格式如下:

com.letv.android.client	乐视视频	软件	图像影音	视频	
com.letv.android.client.pad	乐视视频HD	软件	图像影音	视频	体育,
com.letv.tvos.appstore	乐视应用商店	软件	系统性能	工具	搜索,
com.telecom.video.lsysdx	乐视影视电信版	软件	图像影音	视频	
com.letv.cloud.disk	乐视云盘	软件	办公商务	存储	乐视,
com.wuba	58同城	软件	通信社交	社交	租房,周边信息,生活服务,招聘,实用工具,生活,同城,求职,二手物品,房产,
com.godyj.lottery	彩票大赢家2015	软件	金融理财	彩票	票务,
com.sankuai.movie	猫眼电影	软件	便捷生活	生活	团购,视频,优惠,购票,购物,选座,娱乐,影院,电影票,

数据最后一列是以逗号分隔的app标签,需要将所有的app标签进行一个热度的排序

2.思路
  1. 使用split按照逗号将数据切分成数组格式
  2. 然后使用行转列函数explode将数据进行转列
  3. 使用lateral view 将行转列的数据横向添加到表中方便查询
  4. 使用group by 加上order by 对标签进行合并统计产生一张标签和标签数量排好序的表
  5. 将上述的表使用over函数和rank函数进行一个排名追加到结果表中,到此任务完成
3.实现
select tag,num,rank() over(order by num desc) rank from (
select tag,count(1) num from app_abstract_info lateral view explode(split(tags,',')) tag_table as tag where tag != '' and tag != '-' group by tag order by num desc
) rank_table limit 10;

二.技术栈
  • hive 基础
    • 常用的建表语句
    • 将hdfs的数据导入到hive中
  • hive 中的数据分析函数
    • 窗口函数 over()
    • 数据的行转列 explode
    • 将行转列的数据转换成一个表 lateral view
    • 排序函数 rank() row_number() dense_rank()
  • hive shell脚本的使用
  • udf
三.项目中遇到的难点 1.数据中脏数据的清洗

在测试的过程中发现,最后一列的数据如果按照逗号分隔的话会出现很多空字符串和"-"
如下:

select tag,count(1) num from app_abstract_info lateral view explode(split(tags,',')) tag_table as tag group by tag order by num desc limit 10;

在这里插入图片描述
解决方法:

  1. 使用where进行数据的筛选
select tag,count(1) num from app_abstract_info lateral view explode(split(tags,',')) tag_table as tag where tag != '' and tag != '-' group by tag order by num desc limit 10;
  1. 自定义split函数,将空串和"-"去掉
package com.antg.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

import java.util.ArrayList;
public class MySplit extends UDF {
    public  ArrayList evaluate(String input){
        String[] split = input.split(",");
        ArrayList result = new ArrayList<>();
        for (String s : split) {
            if(s.length()!=0&&!s.equals("-")){
                    result.add(s);
            }
        }
        return result;
    }

}
2.自定义udf返回Array数据类型

这个地方卡了很久
尝试过返回值是String[],失败了
返回值是String然后将数据拼接成array数据的格式 失败了
尝试过返回List 失败了
谷歌百度了很久也没有找到一个满意的答案
最后在上床后躺那刷csdn,终于在csdn上找到了一篇文章说是返回值是ArrayList

四.收获与感悟 1.数据开发类项目的项目结构
  • create 存放建表语句
  • deal 存放数据处理的语句
  • data 存放需要处理的数据
  • conf 存放配置文件
  • udf 存放自定义的函数

虽然有些文件在项目中没有用到,但是为了规范性和以后的维护方便所以这些文件创建很有必要

2.开发流程
  1. 项目概述,需要了解项目的大概背景
  2. 需求分析,对数据的输入输出格式进行对齐
  3. 技术方案选型,对需要解决的需求进行大体的技术选型,注意:能用sql解决的就不用java,这样方便以后的维护
  4. 确定开发计划(什么事由什么人在什么时间完成)
  5. 细节开发(大体任务分配后,由每个人确定自己的开发细节)
  6. ​代码优化与标准化
  7. 正式上线
五.项目地址

https://gitee.com/antgcode/app_hot_rank

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号