【数据湖案例】一站式大数据库业务开发

举报
lixinlong 发表于 2018/07/27 16:03:44 2018/07/27
【摘要】 如果你已经申请MRS、DLI、DWS等大数据产品,接下来的时间里,你会希望将在大数据服务上快速运行业务,数据湖工厂(DLF)是一个在线一站式大数据开发平台,协助用户业务快速上云。本文利用数据湖工厂(DLF)、数据湖探索(DLI)对电影评分原始数据进行分析,输出评分最高和最活跃TOP 20电影。通过本文可以学习到DLF脚本编辑、作业编辑、作业调度等功能,以及DLI的SQL基本语法。

如果你已经申请MRS、DLI、DWS等大数据产品,接下来的时间里,你会希望将在大数据服务上快速运行业务,数据湖工厂(DLF)是一个在线一站式大数据开发平台,协助用户业务快速上云。本文利用数据湖工厂(DLF)、数据湖探索(DLI)对电影评分原始数据进行分析,输出评分最高和最活跃TOP 20电影。通过本文可以学习到DLF脚本编辑、作业编辑、作业调度等功能,以及DLI的SQL基本语法。

  • 数据湖工厂(Data Lake Factory)提供一站式的大数据协同开发平台,帮忙用户轻松完成数据建模,数据集成,脚本开发,作业调度,运维监控等多项任务,可以极大降低用户使用大数据的门槛,帮助用户快速构建大数据处理中心。


数据准备
演示数据来自https://grouplens.org/datasets/movielens/,为了方便演示,保存在本文附件中。请将附件中的数据上传到OBS桶中,后面DLF和DLI直接对桶中的数据做处理。


原始数据说明
movies.csv保存电影基本信息,字段:电影ID、名称、流派
movie表.JPG 
ratings.csv保存电影评分,字段:用户ID、电影ID、评分、评分时间,评分取值范围:0~5
 rating表.JPG


创建数据库表
我们需要创建movie和rating两张表存放原始数据,另外创建top_rating_movie和top_active_movie存放分析结果,即评分最高和最活跃TOP 20电影。

创表SQL可以使用DLI或DLF的编辑器执行,下面使用DLF编辑器执行SQL。
首先需要创建一个DLF到DLI的连接。
 创建DLI连接.JPG

接着在“数据开发”创建一个SQL脚本,打开脚本编辑器。
脚本编辑.JPG 
输入以下创表语句创建4个表。

 


create table movie(movieId int,title varchar(256),genres varchar(256)) using csv options (path 's3a://obs-movies/movies.csv');
create table rating(userId int,movieId int,rating float,rating_date long) using csv options (path 's3a://obs-movies/ratings.csv');
create table top_rating_movie(title varchar(256),avg_rating float,rating_user_number int);
create table top_active_movie(title varchar(256),avg_rating float,rating_user_number int);


说明

movie和rating是OBS表,数据存储在obs上,top_rating_movie和top_active_movie是DLI表,存储分析结果。

movie和 rating表创建成功后,可以使用SELECT语句查询obs文件s3a://obs-movies/movies.csv和s3a://obs-movies/ratings.csv上的数据。
 

分析数据
分别创建SQL脚本,从movie和rating表中计算出评分最高和最活跃TOP 20电影,将结果存在放到top_rating_movie和top_active_movie表。
计算top_rating_movie脚本内容

insert overwrite table top_rating_movie
select
  a.title,
  b.ratings / b.rating_user_number as avg_rating,
  b.rating_user_number

from
  movie a,
  (
    select
      movieId,
      sum(rating) ratings,
      count(1) as rating_user_number

    from
      rating
    group by
      movieId
  ) b
where
  rating_user_number > 100
  and a.movieId = b.movieId
order by
  avg_rating desc
limit
  20


这个SQL先一个子SELECT语句对rating表按movieId计算出每部电影的总评分和用户评分数。将子SELECT语言和movie做join查询,过滤掉用户评分数小于100的记录,然后返回电影名称、平均评分和用户评分数,最后将结果保存到表top_rating_movie。

计算top_active_movie脚本内容

insert overwrite table top_active_movie
select
  a.title,
  b.ratingSum / b.rating_user_number as avg_rating,
  b.rating_user_number

from
  movie a,
  (
    select
      movieId,
      sum(rating) ratingSum,
      count(1) as rating_user_number

    from
      rating
    group by
      movieId
  ) b
where
  avg_rating > 3.5
  and a.movieId = b.movieId
order by
  rating_user_number desc
limit
  20


最活跃TOP20电影计算方法是平均评分大于3.5用户评分数最多20部电影。

 

每天定时刷新TOP20数据
我们假设movie和rating表实时在变动的,所以希望每天更新TOP20电影;这里可以使用DLF作业编排和作业调度功能。
首先创建一个DLF作业
 作业编排.JPG

作业里面有一个Dummy节点和两个DLI SQL节点,两个DLI SQL节点各关联到计算评分最高和最活跃TOP20电影DLI SQL脚本(top_rating_movie和top_active_movie)。
 DLI SQL节点配置.JPG

编排完成后,点击“运行测试”,测试一下作业,运行日志如下。

运行日志.JPG 
如果日志显示运行正常后,配置作业调度策略。
 调度策略.JPG

配置策略:每天0点执行一次作业。完整完毕后,点击保存,然后点击提交作业,这样就好每天自动运行作业,自动将TOP 20电影保存到表(top_rating_movie和top_active_movie)了。


作业监控
作业每天是在自动运行的,对用户来说希望可以及时了解作业的执行结果是成功还是失败。用户可以通过DLF的作业监控界面、邮件通知、短信通知了解作业结果。
 

作业监控.JPG

 

    附件下载

  • data.zip 804.4KB 下载次数:17
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。