hadoop学习---基于Hive的聊天数据分析报表可视化案例

news2025/1/11 18:43:56

背景介绍:

聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的发展决策提供精确的数据支撑。 我们将基于一个社交平台App的用户数据,完成相关指标的统计分析并结合BI工具对指标进行可视化展现。

目标:

基于Hadoop和Hive实现聊天数据统计分析,构建聊天数据分析报表

需求分析:

统计今日总消息量 统计今日每小时消息量、发送和接收用户数

统计今日各地区发送消息数据量

统计今日发送消息和接收消息的用户数

统计今日发送消息最多的Top10用户

统计今日接收消息最多的Top10用户

统计发送人的手机型号分布情况

统计发送人的设备操作系统分布情况

数据源:数据源

数据大小:30万条数据

列分隔符:Hive默认分隔符’\001’   

数据字典及样例数据

 构建数据库数据表hive:

create database db_msg;
use db_msg;
--建表
create table db_msg.tb_msg_source(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容"
);

将数据源上传到Linux文件系统中,再上传到hadoop中:

[hadoop@node1 ~]$ hadoop fs -mkdir -p /chatdemo/data
[hadoop@node1 ~]$ hadoop fs -put chat_data-30W.csv /chatdemo/data

 将数据源从hadoop中下载到hive数据库中:

load data inpath '/chatdemo/data/chat_data-30W.csv' into table db_msg.tb_msg_source;

 

数据清洗:

问题1:当前数据中,有一些数据的字段为空,不是合法数据

问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理

问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理

数据清洗:

select
    *,
    date(msg_time) as msg_day,
    hour(msg_time) as msg_hour,
    split(sender_gps,',')[0] as sender_lng,
    split(sender_gps,',')[1] as sender_lat
from tb_msg_source
where length(sender_gps)>0;

将清洗后的数据在放入新表中,添加新的字段:

create table db_msg.tb_msg_etl(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);

 将数据插入到新表:

insert overwrite table db_msg.tb_msg_etl
select
    *,
    date(msg_time) as msg_day,
    hour(msg_time) as msg_hour,
    split(sender_gps,',')[0] as sender_lng,
    split(sender_gps,',')[1] as sender_lat
from tb_msg_source
where length(sender_gps)>0;

将需求指标查询出来构建新表:

-- 统计今日总消息量
create table db_msg.tb_rs_total_msg_cnt comment '每日消息总量' as
select msg_day, count(*) as total_msg_cnt from db_msg.tb_msg_etl group by msg_day ;
-- 统计今日每小时消息量、发送和接收用户数
create table db_msg.tb_rs_hour_msg_cnt comment '每小时消息量趋势' as
select
    msg_hour,
    count(*) as total_msg_cnt,
    count(distinct sender_account) as sender_user_cnt,
    count(distinct receiver_account) as receiver_user_cnt
from db_msg.tb_msg_etl
group by msg_hour;
-- 统计今日各地区发送消息数据量
create table db_msg.tb_rs_loc_cnt comment '每日各地区发送消息总量' as
select
    msg_day,sender_lng,sender_lat,count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by msg_day,sender_lng,sender_lat
-- 统计今日发送消息和接收消息的用户数
create table db_msg.tb_rs_user_cnt comment '每日发送和接收消息的人数' as
select
    msg_day,
    count(distinct sender_account) as sender_user_cnt,
    count(distinct receiver_account) as receiver_user_cnt
from db_msg.tb_msg_etl
group by msg_day;
-- 统计今日发送消息最多的Top10用户
create table db_msg.tb_rs_s_user_top10 comment '发送消息最多的10个用户' as
select
    sender_name,
    count(*) as sender_msg_cnt
from db_msg.tb_msg_etl group by sender_name
order by sender_msg_cnt desc
limit 10;
-- 统计今日接收消息最多的Top10用户
create table db_msg.tb_rs_r_user_top10 comment '接受消息最多的10个用户' as
select
    receiver_name,
    count(*) as receiver_msg_cnt
from db_msg.tb_msg_etl group by tb_msg_etl.receiver_name
order by receiver_msg_cnt desc
limit 10;
-- 统计发送人的手机型号分布情况
create table db_msg.tb_rs_sender_phone comment '发送人的手机型号分布' as
select
    sender_phonetype,
    count(*) as cnt
from db_msg.tb_msg_etl group by sender_phonetype;
-- 统计发送人的设备操作系统分布情况
create table db_msg.tb_rs_sender_os comment '发送人的os分布' as
select
    sender_os,
    count(*) as cnt
from db_msg.tb_msg_etl group by sender_os;

 

基于FineBI完成指标的可视化展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制,八进制,十六进制转十进制 c++

紧接着十进制转二进制,八进制,十六进制-CSDN博客这篇文章 输入一个二进制,八进制的数,怎样能转化为十进制呢? 原理如下: K进制转十进制 按权相加法展开成一个多项式,每项是该位的数码与相应…

Maven+Junit5 + Allure +Jenkins 搭建 UI 自动化测试实战

文章目录 效果展示Junit 5Junit 5 介绍Junit 5 与 Junit 4 对比PageFactory 模式编写自动化代码公共方法提取测试用例参数化Jenkins 搭建及配置参数化执行生成 Allure 报告Maven 常用命令介绍POM 文件效果展示 本 chat 介绍 UI 自动化测试框架的搭建: 运用 page factory 模式…

高速开箱机价格与性能解析:如何挑选适合您的开箱解决方案?

随着电商和物流行业的迅猛发展,高效、自动化的包装设备成为了提升工作效率、减少人工成本的必备利器。高速开箱机作为其中的重要一环,其性能与价格成为了许多企业和个人关注的焦点。星派将深入探讨高速开箱机的价格与性能之间的关系,帮助您在…

基于springboot+vue+Mysql的口腔管理平台

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Linux无root配置Node,安装nvm

1. 安装NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 或者,如果你使用wget wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 对于bash用户,可以运行&…

时序图详解

1.这是iic总线在回应时候的时序图,data in代表eeprom收到数据,回stm32的ack,数据回应,data out代表stm32收到eeprom的消息,数据输出ack回应 2.交叉线 代表在这一次输出高电平,或者在这一次也可能输出低电…

《武林秘籍》——闪侠惠递如何让消费者寄快递更安心!

现如今,网上下单寄快递的便利性让众多人享受到了电商物流飞速发展带来的红利性。今天小编直接介绍一款寄快递特别省钱的利器,就是利用闪侠惠递来寄快递。闪侠惠递寄快递,真正的实现了便宜寄快递发物流的便捷性,开创了低价发快递的…

Hypack 2024 简体中文资源完整翻译汉化已经全部完成

Hypack 2024 简体中文资源完整翻译汉化已经全部完成 Hypack 2024,资源汉化共翻译11065条。毕竟涉及测绘、水文、疏浚等专业术语太多,翻译有很多理解不正确的地方,望各位专业人员指正。 压缩包内包含Hypack 2024、Hypack 2022、Hypack 2021、…

企业如何用数字化为预提摊销业务赋能?

对于企业来说,想要实现系统化、智能化、自动化的预提摊销管理,需要做足哪些功课?常见场景下的业务难题又该如何破解?今天胜意科技就给大家介绍一下,企业如何通过数字化手段搞定预提摊销业务难题。 一、预提摊销痛点 在…

Java 三大特性之继承

目录 一、为什么需要继承? 二、继承概念 三、继承的语法 四、子类访问父类成员 五、super关键字 六、继承关系下的构造方法 七、继承关系下的初始化 八、protected关键字 九、继承的三种方式 十、final关键字 十一、继承和组合 一、为什么需要继承&#…

可视化面板布局适配屏幕-基于 flexible.js + rem 智能大屏适配

可视化面板布局适配屏幕-基于 flexible.js rem 智能大屏适配 VScode 安装cssrem插件引入flexible.js在之后的开发都使用rem为单位,安装cssrem插件就是为了快捷将px转为rem我们的设计稿是1920px,设置最小宽度为1024px,最后,我们可…

(2024,LSTM,Transformer,指数门控,归一化器状态,多头内存混合)xLSTM:扩展的 LSTM

xLSTM: Extended Long Short-Term Memory 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. 扩展的 LSTM 2.1 LSTM 回顾 2.2 sLSTM 2.3 mLSTM 2.4 xLSTM 架构 2…

Java进阶06List集合泛型

Java进阶06 集合 一、集合及其体系结构 集合是一个长度可变的容器 1、集合的体系结构 1.1 单列集合 单列集合使用add()方法添加集合元素,一次只能添加一个元素。 单列集合均实现了Collection接口,该接口还有两个子接口List和Set。 List接口 List集合…

详细分析McCabe环路复杂度(附例题)

目录 前言1. 基本知识2. 例题 前言 该知识点常出在408或者软考中,对此此文重点讲讲理论知识以及例题 对于例题平时看到也会更新 1. 基本知识 McCabe环路复杂度是一种用于衡量软件代码复杂性的指标,主要是通过计算代码中的控制流图中的环路数量来衡量…

为什么选择ATECLOUD自动化测试平台?

在当今飞速发展的时代,一切都在不断进步与变革,电测行业也由手动测试逐步转向了自动化测试。但是随着科技的发展,对于产品的测试要求也越来越高,传统的自动化测试系统已经无法满足用户日益增长的测试需求,全新的ATE测试…

全国33个省228189个矿产地位置分布数据,含经纬度坐标/CSV格式

全国矿产地分布(2021版) 数据来源: 全国矿产地数据库2021版 (ngac.org.cn) http://data.ngac.org.cn/mineralresource/index.html 数据获取方法:树谷资料库大全(2024年4月19日更新) 进入网站后&#xf…

【Qt 开发基础体系】Qt信号与槽机制

文章目录 1.Qt 信号与槽机制原理(Signal & Slot)2. QObject 类 connect 的介绍3. 信号与槽机制连接方式4. 信号和槽机制优势及其效率:3. 信号与槽机制应用 1.Qt 信号与槽机制原理(Signal & Slot) &#x1f42…

cesium雷达扫描(消逝圆效果)

cesium雷达扫描(消逝圆效果) 以下为源码直接复制可用 1、实现思路 通过修改“material”材质来实现轨迹球效果 2、示例代码 1、index.html <!DOCTYPE html> <html lang="en"><head><!

程序的机器级表示——Intel x86 汇编讲解

往期地址&#xff1a; 操作系统系列一 —— 操作系统概述操作系统系列二 —— 进程操作系统系列三 —— 编译与链接关系操作系统系列四 —— 栈与函数调用关系操作系统系列五 —— 目标文件详解操作系统系列六 —— 详细解释【静态链接】操作系统系列七 —— 装载操作系统系列…

漏扫神器Invicti V2024.4.0专业版

前言 Invicti Professional是Invicti Security公司推出的一个产品&#xff0c;它是一种高级的网络安全扫描工具。Invicti Professional旨在帮助组织发现和修复其网络系统中的潜在安全漏洞和弱点。它提供了全面的漏洞扫描功能&#xff0c;包括Web应用程序和网络基础设施的漏洞扫…