zoukankan      html  css  js  c++  java
  • hive学习09天-Hive结合python对电影浏览量以及评分数据分析

    本博客参照github上的案例进行学习记录

    github地址:https://github.com/ljcan/Hive_Project

    #下载数据集
    wget http://files.grouplens.org/datasets/movielens/ml-100k.zip unzip ml-100k.zip
    查看数据集

    [dip@dip007 ml-100k]$ head u.data
    196 242 3 881250949
    186 302 3 891717742
    22 377 1 878887116
    244 51 2 880606923
    166 346 1 886397596
    298 474 4 884182806
    115 265 2 881171488
    253 465 5 891628467
    305 451 3 886324817
    6 86 3 883603013

    每一列分别代表 : 用户id,电影id,评分,时间

    需求分析:

    根据用户观看的日期的时间分析在一周中哪一天观看电影的用户最多,也就是电影浏览量峰值。
    统计分析电影评分排行榜TOP10(后续可以对用户进行电影推荐)

    思路1:

    对数据集通过MR进行预处理(最后一列进行格式转换),然后导入hive中进行数据分析

    思路2:

    直接导入数据到hive中,通过hive调用python函数生成临时表,然后再进行分析

    思路一:
    MR处理数据:

    [dip@dip007 ml-100k]$ cat map.py
    import datetime
    import sys

    for line in sys.stdin:
    arr=line.strip().split(" ")
    tmp=datetime.datetime.fromtimestamp(float(arr[3])).isoweekday()
    print " ".join([arr[0],arr[1],arr[2],str(tmp)])

    [dip@dip007 ml-100k]$ cat run.sh
    input="/home/dip/lzm/u.data"
    output="/home/dip/lzm/out"
    hadoop jar
    /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.15.1.jar
    -input $input
    -output $output
    -mapper "python map.py"
    -reducer "cat"
    -file "./map.py"

    执行 bash  run.sh

    导入hive:

    create table movie(
    user_id  string,
    movie_id string,
    score int,
    week int
    )row format delimited fields terminated by ' ';
    load data inpath '/home/dip/lzm/out' into table movie

    数据分析1:
    根据用户观看的日期的时间分析在一周中哪一天观看电影的用户最多,也就是电影浏览量峰值。
    select week ,count(*) as cnt from movie group by week order by cnt desc;
    数据分析2:
    统计分析电影评分排行榜TOP10(后续可以对用户进行电影推荐)
    select movie_id,score from movie order by score desc limit 10;

    思路二:

    直接将原始数据导入表中,然后写一个python脚本,hive中调用python脚本,写入临时表

    思路二:

    map.py 如下 


    import datetime
    import sys

    for line in sys.stdin:
      arr=line.strip().split(" ")
      tmp=datetime.datetime.fromtimestamp(float(arr[3])).isoweekday()
      print " ".join([arr[0],arr[1],arr[2],str(tmp)])

    创建表:

    create table movie(
    user_id string,
    movie_id string,
    score int,
    week int
    )row format delimited fields terminated by ' ';
    load data local inpath '/home/dip/lzm/ml-100k/u.data' into table movie

    创建临时表 :

    create table movie_tmp(
    user_id string,
    movie_id string,
    score int,
    week int
    )row format delimited fields terminated by ' ';

    数据格式转换 

    add FILE /home/dip/lzm/ml-100k/map.py;
    insert into table movie_tmp
    select
    transform (user_id,movie_id,score,week)
    using "python map.py"
    as (user_id,movie_id,score,week)
    from movie;

    数据分析1:
    根据用户观看的日期的时间分析在一周中哪一天观看电影的用户最多,也就是电影浏览量峰值。
    select week ,count(*) as cnt from movie_tmp group by week order by cnt desc;
    数据分析2:
    统计分析电影评分排行榜TOP10(后续可以对用户进行电影推荐)
    select movie_id,score from movie_tmp order by score desc limit 10;

    思考:

    第一种方式适合数据还没有加载到hive中,直接处理,然后再进入hive库中

    第二种方式适合数据已经加载到hive中,需要进行分析

  • 相关阅读:
    关于如在本地虚拟机上linux系统上设置静态的ip地址
    编程规约(下)-阿里巴巴Java开发手册
    编程规约(上) -- 阿里巴巴Java开发手册
    eclipse项目导入到idea
    博客收藏
    springboot springcloud
    idea配置maven仓库
    理项目
    日志管理
    [置顶] 2016年终总结
  • 原文地址:https://www.cnblogs.com/students/p/10972077.html
Copyright © 2011-2022 走看看