Hive调用python脚本实现数据清洗、统计过程

转载:https://blog.csdn.net/bbbeoy/article/details/80772023

本实例通过python脚本对电影数据进行清洗,帮助读者了解hive调用python脚本的整个流程。

操作步骤:

1、创建基表

CREATE TABLE u_data (
  userid INT,   //用户ID
  movieid INT,  //电影ID
  rating INT,    //电影评分
  unixtime STRING)。 //时间戳
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'    
STORED AS TEXTFILE;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2、加载数据

(1)下载数据源到/home/hadoop/data/目录:

wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
  • 1

(2)解压:

unzip ml-100k.zip
  • 1

(3)加载数据:

 
  1. hive> LOAD DATA LOCAL INPATH '/home/hadoop/data/u.data'

  2. hive> OVERWRITE INTO TABLE u_data;

  • 1
  • 2

3、查询数据 
首先看一下加载的数据内容,执行:

 hive> select * from u_data limit 1;
  • 1

结果如下: 
一条数据
统计数据条数,执行:

hive> SELECT COUNT(*) FROM u_data;
  • 1

结果如下: 
这里写图片描述
我们可以看到,一共有10万条数据被加载到u_data表中。 
4、建立python脚本 
此脚本主要清洗数据集中的时间戳,将时间戳转化为字符串日期时间,提取日期时间中的星期值。

import sys
import datetime
 
for line in sys.stdin:  #接收输入
  line = line.strip()    #去除头尾的空格
  userid, movieid, rating, unixtime = line.split('\t') #分割一条数据
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()#转化unixtime时间戳为日期时间,获取对应的星期值
  print ('\t'.join([userid, movieid, rating, str(weekday)]))#输出清洗后的数据

保存为weekday_mapper.py,保存路径为:/home/hadoop/data。 
5、 创建子表

create table u_data_new(
userid int,
movieid int,
rating int,
weekday int
)
row format delimited
fields terminated by '\t';

6、 添加python脚本:

hive> add FILE /home/hadoop/data/weekday_mapper.py;//绝对路径
  • 1

结果如下: 
这里写图片描述

7、 插入数据 
将原数据表u_data中经过python脚本清洗后的数据,加载到子表u_data_new中

insert overwrite table u_data_new
select 
transform (userid,movieid,rating,unixtime)
using 'python weekday_mapper.py'
as (userid,movieid,rating,weekday)
from u_data;

8、查询数据 
查询新表u_data_new数据,并与基表u_data数据对比,执行:

 
  1. hive> select * from db_hive_test.u_data_new limit 1;

  2. hive> select * from db_hive_test.u_data_new limit 1;

结果如下: 
这里写图片描述
我们发现,新表时间字段经过python脚本清洗后,转化为星期值 
9、统计一周内每天电影观影人次(假设每次观影后必须评分)

select weekday,count(*)
from u_data_new
group by weekday;

结果如下: 
这里写图片描述


总结: 
通过以上的例子,我们可以整体了解hive调用python脚本的过程,读者可根据业务需求改进python脚本内容,满足不同的业务场景。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值