大数据训练营-Hive SQL影评分析

2 篇文章 0 订阅

数据解释

t_user 观众表(6000+ 条数据)

  • 字段为:UserID, Sex, Age, Occupation, Zipcode
  • 字段中文解释:用户 id,性别,年龄,职业,邮编

t_movie 电影表(共 3000+ 条数据)

  • 字段为:MovieID, MovieName, MovieType
  • 字段中文解释:电影 ID,电影名,电影类型

t_rating 影评表(100 万 + 条数据)

  • 字段为:UserID, MovieID, Rate, Times
  • 字段中文解释:用户 ID,电影 ID,评分,评分时间
  •  

 数据下载:hive影评案例.zip-Hive文档类资源-CSDN下载

1.数据放到服务器上(略)
2.将数据放hdfs上(略)
3.从/data/hive copy一份数据到自己的hdfs文件夹下(/data/hive学习的时候该文件是共享的,为了不破坏大家使用,所以需要cp一份到自己的目录)
hadoop fs -cp /data/hive/users /user/jean/week4
hadoop fs -cp /data/hive/movies  /user/jean/week4
hadoop fs -cp /data/hive/ratings /user/jean/week4

数据准备:

-- 建t_movie表
CREATE TABLE `t_movie`(
  `movie_id` bigint COMMENT '电影id', 
  `movie_name` string COMMENT '电影名字', 
  `movie_type` string COMMENT '电影类型')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='::') -- 按::进行分隔,如果数据本身是别的分隔符,按具体情况选择,例如:\t
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/user/jean/week4/movies' -- hdfs文件路径
TBLPROPERTIES (
  'bucketing_version'='2', 
  'transient_lastDdlTime'='1648533877');

-- 建t_rating表
CREATE TABLE `t_rating`(
  `user_id` int COMMENT '用户id', 
  `movie_id` bigint COMMENT '电影id', 
  `rate` int COMMENT '评分', 
  `times` string COMMENT '评分时间')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='::') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
	  '/user/jean/week4/ratings' -- hdfs文件路径
TBLPROPERTIES (
  'bucketing_version'='2', 
  'transient_lastDdlTime'='1648534400');
-- 建t_user表
CREATE TABLE `t_user`(
  `user_id` int COMMENT '用户id', 
  `sex` string COMMENT '性别', 
  `age` int COMMENT '年龄', 
  `occupation` string COMMENT '职业', 
  `zip_code` bigint COMMENT '邮编')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='::') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/user/jean/week4/users'  -- hdfs文件路径
TBLPROPERTIES (
  'bucketing_version'='2', 
  'transient_lastDdlTime'='1648534260')

题目一(简单):展示电影 ID 为 2116 这部电影各年龄段的平均影评分。

 解析:方法一(比较冗余)

SELECT
	u.age AS age,
	AVG(m.rate) AS avgrate
FROM
	t_user AS u
JOIN (
	SELECT
		b.rate AS rate,
		b.user_id AS user_id
	FROM
		t_movie AS a
	INNER JOIN (
		SELECT
			*
		FROM
			t_rating
		WHERE
			movie_id = 2116
	) AS b ON a.movie_id = b.movie_id
	WHERE
		a.movie_id = 2116
) m ON u.user_id = m.user_id
GROUP BY
	age
ORDER BY
	age;

解析:方法二 (推荐)

SELECT
	c.age,
	avg(b.rate)
FROM
	t_movie a
JOIN t_rating b ON a.movie_id = b.movie_id
JOIN t_user c ON c.user_id = b.user_id
WHERE
	a.movie_id = 2116
GROUP BY
	c.age
ORDER BY
	c.age;

解题思路:3表联合join 的使用

题目二(中等):找出男性评分最高且评分次数超过 50 次的 10 部电影,展示电影名,平均影评分和评分次数。

 解析:(注意:先平均 在排序取高)

create temporary table answer2 as 
select 
"M" as sex, c.movie_name as name, avg(a.rate) as avgrate, count(c.movie_name) as total  
from t_rating a 
join t_user b on a.user_id=b.user_id 
join t_movie c on a.movie_id=c.movie_id 
where b.sex="M" 
group by c.movie_name 
having total > 50
order by avgrate desc 
limit 10;

题目三(选做):找出影评次数最多的女士所给出最高分的 10 部电影的平均影评分,展示电影名和平均影评分(可使用多行 SQL)。

  解析:可以创键临时表 (注意:先排序取高 在取平均)

 # 女性影评次数最多,use_id=1150 
create table answer1_f as 
select a.user_id from t_user a join t_rating b on a.user_id=b.user_id where a.sex = "F" group by a.user_id ORDER BY COUNT(1) DESC limit 1; 

# 评分最高的电影
create table answer2 as 
select movie_id,rate from t_rating where user_id = 1150 order by rate desc limit 10; 

create table answer3 as 
select b.movie_id as movieid, c.movie_name as moviename, avg(b.rate) as avgrate 
from answer2 a 
join t_rating b on a.movie_id=b.movie_id 
join t_movie c on b.movie_id=c.movie_id 
group by b.movie_id,c.movie_name;

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Hive on Spark是大数据处理中的最佳实践之一。它将Hive和Spark两个开源项目结合起来,使得Hive可以在Spark上运行,从而提高了数据处理的效率和速度。Hive on Spark可以处理大规模的数据,支持SQL查询和数据分析,同时还可以与其他大数据工具集成,如Hadoop、HBase等。在实际应用中,Hive on Spark可以用于数据仓库、数据分析、机器学习等领域,是一种非常实用的大数据处理方案。 ### 回答2: 随着大数据应用的不断增多,越来越多的企业开始关注大数据技术的实现与应用。Hive是基于Hadoop的开源数据仓库系统,它提供了一种类似于SQL的语言,使得非技术用户能够方便地查询大量数据。而Spark则是现在最流行的分布式计算框架,因其内存计算功能,比Hadoop更加高效和快速。 在实践中,Hive on Spark将两个框架结合在一起,提供了更高效和实用的解决方案。在Hive on Spark中,数据可以通过Spark来加速计算和查询,从而实现更高效的大数据处理。Hive on Spark集成了Spark的强大内存计算引擎,可以支持更大规模的数据处理和更快速的查询处理,同时还可以提供更好的性能、更低的延迟和更低的处理成本。 Hive on Spark采用了Spark作为计算框架,Spark可以很快地对Hive上的数据进行处理,因此可以处理数百亿条数据。此外,由于Spark是基于内存的计算框架,因此可以大大提高计算速度,并消除了磁盘IO瓶颈。因此,Hive on Spark可以支持更快的查询响应时间和更高的用户并发性能。 除了这些,Hive on Spark还提供了更简单的应用管理和维护,对提高大数据处理效率和时间的优化非常有利。同时,它还提供了机器学习和深度学习模型的处理能力,从而可以实现更广泛的数据分析应用。尤其对于非技术人员,通过Hive on Spark,用户可以快速地实现自己的数据分析需求,从而实现有效管理和使用数据。 总之,Hive on Spark是目前最有效和实用的大数据处理和管理框架之一。它使得数据分析变得更加简单和高效,并可以快速满足业务需求,使企业在大数据技术和应用方向上取得更大成就。 ### 回答3: Hive on Spark是一种基于Apache Spark的分布式计算系统,它将Apache Hive和Spark技术相结合,提供了更加高效的数据处理和分析能力。在大数据行业中,Hive on Spark已经成为了一种最佳实践,因为它能够帮助企业实现更快的数据处理速度和更高的数据处理能力。 首先,Hive on Spark可以让企业更加轻松地使用Spark进行数据处理和分析。Apache Spark是一种流行的分布式计算框架,拥有强大的数据处理能力和高效的架构。而Hive on Spark将Hive SQL和Spark技术相结合,让企业用户能够以更加简单的方式使用Spark进行数据分析和处理。 其次,Hive on Spark能够极大地提高数据处理的速度和能力。Hive on Spark通过将Hive SQL转换为Spark的RDD操作,能够在分布式环境下对大规模数据进行高效的处理和分析。相比于传统的Hadoop集群,Hive on Spark可以提供更高的数据处理速度和更高的数据处理能力,能够帮助企业更加顺畅地进行数据分析和决策。 最后,Hive on Spark还具有可扩展性和灵活性。企业用户可以根据自身的需求对Spark集群进行扩容或者缩容,以满足更加多样化的数据处理需求。同时,Hive on Spark还支持多种数据格式,包括Hive表、CSV、JSON等,能够帮助企业更加灵活地处理不同类型的数据。 总之,Hive on Spark是大数据行业最佳实践之一,它能够帮助企业客户更加方便地使用Spark进行数据处理和分析,提高数据处理的速度和能力,同时还具有可扩展性和灵活性等特点,能够帮助企业更加高效地进行数据分析和决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值