设为首页 加入收藏

TOP

Hive调用python脚本实现数据清洗、统计过程
2018-12-07 01:26:38 】 浏览:13
Tags:Hive 调用 python 脚本 实现 数据 清洗 统计 过程
版权声明: https://blog.csdn.net/isyslab/article/details/80365894

Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能,本实例通过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;

2、加载数据

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

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

(2)解压:

unzip ml-100k.zip

(3)加载数据:

hive> LOAD DATA LOCAL INPATH '/home/hadoop/data/u.data' 
hive> OVERWRITE INTO TABLE u_data;

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

 hive> select * from u_data limit 1

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

hive> SELECT COUNT(*) FROM u_data;

结果如下:
这里写图片描述
我们可以看到,一共有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;//绝对路径

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

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数据对比,执行:

hive> select * from db_hive_test.u_data_new limit 1;
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脚本内容,满足不同的业务场景。


dhp
2018.5.18


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive修改数据表 下一篇truncate——删除hive表中的数据

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }