电影票房之数据分析(Hive)–第5关

  • Post author:
  • Post category:其他



电影票房之数据分析(Hive)

第5关:统计2020年元旦节与国庆节放假后7天的观影人数

本关任务

基于EduCoder平台提供的初始数据集,统计 2020 年元旦节与国庆节放假后 7 天的观影人数。

编程要求

本实验环境已开启

Hadoop

服务

  1. 在 hive 中创建数据库

    mydb


注意:在开始要求2之前,建议您提前查看数据库中是否存在 moviecleaned 表(在环境没销毁的情况下,第一关的导入的数据可以持续使用)。如果不存在请按要求2执行,同时注意数据不要重复插入,否则可能影响后续统计的准确性。



  1. mydb

    中创建

    moviecleaned

    表,将数据集

    movies.txt

    导入

    moviecleaned

    表中。注意:数据集所在位置:

    /data/workspace/myshixun/data/movies.txt

    ,数据集文件字段之间以

    \t

    分割,文件部分数据展示如下:

  2. 天气之子 6676.11 21.2% 92616 25.4% 24 19.9% 11300.0 上映2天 2019-11-02 2019-11-01

  3. 天池水怪 1.14 <0.1% 57 <0.1% 6 -- 84.4 2020-10-09 往期电影

  4. 太空狗之月球大冒险 3.58 <0.1% 333 <0.1% 4 4.5% 270.7 上映14天 2019-12-27 2019-12-14

  5. 夺冠 2985.81 60.4% 133808 50.3% 6 4.0% 22900.0 上映5天 2020-09-29 2020-09-25
  6. 在 hive 数据库

    mydb

    中,创建

    festival_boxoffice

    表,使用 Hive SQL 来统计 2020 年元旦节与国庆节放假后 7 天的观影人数(元旦假期为 2020 年 1 月 1 日到 2020 年 1 月 7 日,国庆假期为 2020 年 10 月 1 日到 2020 年 10 月 7 日,计算规则为:

    观影人数=排片场次∗场均人次

    ),并插入到

    festival_boxoffice

    表。

查询结果样例如下:


  1. dates festival num

  2. 01 new_year_day 6985987

  3. 02 new_year_day 2225843

相关数据及结构说明

数据集对应字段说明:

字段名 说明 类型
movie_name 电影名 string
boxoffice 当日综合票房 string
box_rate 票房占比 string
sessions 排片场次 string
show_count_rate 排片占比 string
avg_number 场均人次 string
attendance 上座率 string
total_boxoffice 当前总票房 string
movie_days 上映天数 string
current_time 当前日期 string
releaseDate 上映日期 string


festival_boxoffice 表结构:

字段名 类型 说明
dates string 日期(日,例如:2020-10-07 即为 07)
festival string 节日,默认为 new_year_day 或者 national_day
num bigint 当天人数

注意事项


  • 如果实验环境已经创建了 mydb 数据库和 moviecleaned 表,假如环境没有重启或者环境没有过期,可以跳过创建 mydb 数据库和 moviecleaned 表的步骤。否则需要重新开始。

  • 任务完成后请点击”评测”按钮,系统验证 festival_boxoffice 表是否存在并查询表内容,程序未通过的情况下,可以点击测试集查看具体问题;

  • 本任务设置了多个测试集,通过其中任一测试集将可获得对应分数。

考核点说明

从 mydb 数据库中的 festival_boxoffice 表查询出来的内容是否正确。


开始你的任务吧,祝你成功!

AC

#创建movie_boxoffice表,用来存放数据查询的结果
create table festival_boxoffice(dates string,festival string, num int) row format delimited fields terminated by '\t' stored as textfile;
#查询,并将结果导入movie_boxoffice表中
insert overwrite table festival_boxoffice 
select split(current_time,'-')[2],case 
when  t.current_time  between '2020-10-01' and '2020-10-07' then 'national_day' 
when  t.current_time between '2020-01-01' and '2020-01-07' then 'new_year_day' 
else 'other' END as festival ,
cast(sum(num) as bigint) 
from (select current_time,avg_number*sessions as num from moviecleaned 
WHERE current_time between '2020-10-01' and '2020-10-07' or current_time between '2020-01-01' and '2020-01-07') t 
GROUP BY current_time;



版权声明:本文为m0_58245389原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。