关键词:
数据链接:
链接:https://pan.baidu.com/s/10P1Bmjx-y17R8jmy4q685g
提取码:79a0
一、项目需求
1.统计视频观看数 Top10
2.统计视频类别热度Top10
3.统计出视频观看数最高的20个视频的所属类别以及类别包含这Top20视频的个数
4.统计视频观看数Top50所关联视频的所属类别的热度排名
5.统计每个类别中的视频热度Top10,以 Music为例
6.统计每个类别中视频流量 Top10 ,以 Music为例
7.统计上传视频最多的用户Top10以及他们上传的观看次数在前20的视频
8.统计每个类别视频观看数Top10(分组取topN)
二、数据介绍
1.视频数据表:
2.用户表:
三、创建表结构
1.视频表:
create table youtube_ori(
videoId string,
uploader string,
age int,
category array<string>,
length int,
views int,
rate float,
ratings int,
comments int,
relatedId array<string>)
row format delimited
fields terminated by "\\t"
collection items terminated by "&" ;
create table youtube_orc(
videoId string,
uploader string,
age int,
category array<string>,
length int,
views int,
rate float,
ratings int,
comments int,
relatedId array<string>)
clustered by (uploader) into 8 buckets
row format delimited
fields terminated by "\\t"
collection items terminated by "&"
stored as orc;
2.用户表:
create table youtube_user_ori(
uploader string,
videos int,
friends int)
clustered by (uploader) into 24 buckets
row format delimited fields terminated by "\\t";
create table youtube_user_orc(
uploader string,
videos int,
friends int)
clustered by (uploader) into 24 buckets
row format delimited fields terminated by "\\t"
stored as orc;
四、数据清洗
通过观察原始数据形式,可以发现,视频可以有多个所属分类,每个所属分类用&符号分割, 且分割的两边有空格字符,同时相关视频也是可以有多个元素,多个相关视频又用“\\t”进 行分割。为了分析数据时方便对存在多个子元素的数据进行操作,我们首先进行数据重组清 洗操作。即:将所有的类别用“&”分割,同时去掉两边空格,多个相关视频 id 也使用“&” 进行分割。
1.ETLUtil
package com.company.sparksql;
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.DataCleaner
package com.company.sparksql
import org.apache.log4j.Level, Logger
import org.apache.spark.sql.SparkSession
object DataCleaner
def main(args: Array[String]): Unit =
val spark = SparkSession
.builder()
.master("local")
.appName(DataCleaner.getClass.getSimpleName)
.getOrCreate()
Logger.getLogger("org.apache.spark").setLevel(Level.OFF)
Logger.getLogger("org.apache.hadoop").setLevel(Level.OFF)
val lineDS = spark.read.textFile("e:/0.txt")
import spark.implicits._
val splitedDS = lineDS.map(ETLUtil.oriString2ETLString(_))
splitedDS.write.format("text").save("e:/movie")
五、数据加载
1.视频表:
加载清洗之后的数据到原始视频表
load data local inpath "/opt/datas/cleaned.txt" into table youtube_ori;
加载数据到视频的ORC表
insert overwrite table youtube_orc select * from youtube_ori;
2用户表:
加载清洗之后的数据到原始用户表
load data local inpath "/opt/datas/user.txt" into table user_ori;
加载数据到用户的ORC表
insert overwrite table user_orc select * from user_ori;
六、业务数据分析
1.统计视频观看数 Top10
select
videoId,
uploader,
age ,
category ,
length ,
views ,
rate ,
ratings ,
comments
from youtube_orc
order by views desc
limit 10;
2.统计视频类别热度Top10
第一种方式:
select
category_name,
count(videoId) as video_num
from youtube_orc lateral view explode(category) youtube_view as category_name
group by category_name
order by video_num desc
limit 10;
第二种方式:
select category_name as category,
count(t1.videoId) as hot
from (select
videoId,
category_name
from youtube_orc lateral view explode(category) t_catetory as category_name) t1
group by t1.category_name
order by hot desc
limit 10;
3.统计出视频观看数最高的20个视频的所属类别以及类别包含这Top20视频的个数
select category_name,
count(videoId) as videonums
from (
select
videoId,
category_name
from
(select
category,
videoId,
views
from
youtube_orc
order by views desc
limit 20) top20view lateral view explode(category) t1_view as category_name )t2_alias group by category_name order by videonums desc;
4.统计视频观看数Top50所关联视频的所属类别的热度排名
select
category_name,
count(relatedvideoId) as hot
from
(select
relatedvideoId,
category
from
(select
distinct relatedvideoId
from (select
views,
relatedId
from
youtube_orc
order by views desc
limit 50 )t1 lateral view explode(relatedId) explode_viedeo as relatedvideoId)t2 join youtube_orc on youtube_orc.videoId = t2.relatedvideoId)t3 lateral view explode(category) explode_category as category_name
group by category_name
order by hot desc;
5.统计每个类别中的视频热度Top10,以 Music为例
select
videoId,
views
from youtube_orc lateral view explode(category) t1_view as category_name
where category_name = "Music"
order by views desc
limit 10 ;
6.统计每个类别中视频流量 Top10 ,以 Music为例
select
videoId ,
ratings
from youtube_orc lateral view explode(category) t1_view as category_name
where category_name = "Music"
order by ratings desc
limit 10 ;
7.统计上传视频最多的用户Top10以及他们上传的观看次数在前20的视频
select t1.uploader,youtube_orc.videoId,youtube_orc.views
from
(select
uploader,videos
from youtube_user_orc
order by videos desc
limit 10) t1 inner join youtube_orc on t1.uploader = youtube_orc.uploader order by views desc limit 20 ;
8.统计每个类别视频观看数Top10(分组取topN)
select
t2_alias.category_name,
t2_alias.videoId,t2_alias.views
from
(
select
category_name,
videoId,views ,
row_number() over(partition by category_name order by views desc) rank
from
youtube_orc lateral view explode(category) t1_view as category_name ) t2_alias where rank <= 10;
基于python的电影数据可视化分析与推荐系统(代码片段)
...评论进行关键词抽取和情感分析。2.功能组成 基于python的电影数据可视化分析系统的功能组成如下图所示:3.基于python的电影数据可视化分析与推荐系统3.1系统注册登录 系统的其他页面的访问需要注册... 查看详情
ml之kg:基于movielens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行top电影推荐案例(代码片段)
ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例目录基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方... 查看详情
基于sparksql的电影分析项目实战(代码片段)
...还原企业中SparkSQL的开发流程,手把手教你构建一个基于SparkSQL的分析系统。为了讲解方便,我会对代码进行拆解,完整的代码已上传至GitHub,想看完整代码可以去clone,顺便给个**Star**。以下是全文,希望... 查看详情
推荐系统案例基于协同过滤的电影推荐(代码片段)
案例--基于协同过滤的电影推荐1.数据集下载2.数据集加载3.相似度计算4.User-BasedCF预测评分算法实现5.Item-BasedCF预测评分算法实现前面我们已经基本掌握了协同过滤推荐算法,以及其中两种最基本的实现方案:User-BasedCF和It... 查看详情
基于seatunnel连通hive数仓和clickhouse的实战(代码片段)
...引入了ClickHouse,用来建设性能更强悍,响应时间更短的数据分析平台,以满足实时性要求,但如何连通Hive数仓和ClickHouse呢?没错,当然是Seatunnel啦!官方推荐的 查看详情
基于docker快速搭建hive环境(代码片段)
一、概述Hive是什么?Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义... 查看详情
django基于用户画像的电影推荐系统源码(项目源代码)(代码片段)
...;以从豆瓣平台爬取的电影数据作为基础数据源,主要基于用户的基本信息和使用操作记录等行为信息来开发用户标签,并使用Hadoop、Spark大数据组件进行分析和处理的推荐系统。管 查看详情
电影数据集(代码片段)
...ieLens数据集可能是最受欢迎的数据集之一。MovieLens是一个基于web的非商业电影推荐系统。创建于1997年,由明尼苏达大学的一个研究实验室GroupLens管理,目的是为了研究目的收集电影分级数据。MovieLens的数据对于包括个性化推荐... 查看详情
ml之cf:基于movielens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行top5电影推荐案例(代码片段)
ML之CF:基于MovieLens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行Top5电影推荐案例目录基于MovieLens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行Top5电影推荐案例 #1、定义... 查看详情
自然语言处理(nlp)基于fnn网络的电影评论情感分析(代码片段)
【自然语言处理(NLP)】基于FNN网络的电影评论情感分析作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机... 查看详情
毕业设计之-题目:基于大数据的电影数据分析可视化系统(代码片段)
...章目录1前言2项目介绍3效果展示4项目分析4.1爬虫部分4.2数据分析部分5最后-毕设帮助1前言Hi,大家好,这里是丹成学长,今天做一个电商销售预测分析,这只是一个demo,尝试对电影数据进行分析,并可视... 查看详情
深入浅出学习hive(代码片段)
本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情
深入浅出学习hive(代码片段)
本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情
深入浅出学习hive(代码片段)
本文是基于CentOS7.9系统环境,进行hive的学习和使用一、Hive的简介1.1Hive基本概念(1)什么是hiveHive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表... 查看详情
基于python的爬虫演示示例-以电影网站为例(代码片段)
...面试题库、技术互助文末获取源码 一,项目简介 基于Python实现豆瓣电影数据的抓去,并存入本在数据库。 数据库结构准备: creat 查看详情
hive中文乱码(代码片段)
...reateexternaltablemovie(userIDintcomment‘用户ID‘,movieIDintcomment‘电影ID‘,ratingintcomment‘电影评分‘,timestampedbigintcomment‘评分时间戳‘,movieNamestringc 查看详情
基于ssm框架的电影院购票系统(代码片段)
今天,博主分享一份基于SSM框架与maven管理的电影院购票系统项目结构该项目基本完成了电影购票流程内的所有功能,项目前端使用ajax进行请求,json数据流返还结果,是一份较为完善的项目技术简介基础框架... 查看详情
hive学习之路hive中文乱码(代码片段)
...reateexternaltablemovie(userIDintcomment‘用户ID‘,movieIDintcomment‘电影ID‘,ratingintcomment‘电影评分‘,timestampedbigintcomment‘评分时间戳‘,movieNamestringcomment 查看详情