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;
下载数据:wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
解压:unzip ml-100k.zip
加载数据:LOAD DATA LOCAL IN PATH '/home/xxxx/ml-100k/u.data' OVERWRITE INTO TABLE u_data;
3、查询数据是否load进表
select * from u_data limit 10;
4、建立python脚本
此脚本主要清洗数据集中的时间戳,将时间戳转化为字符串日期时间,提取日期时间中的星期值。脚本命名为transform.py
点击(此处)折叠或打开
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- """
- @Author: xxxxx
- @Date: 2019/12/06 15:19
- @FileName:transform.py
- """
- import sys
- import datetime
- reload(sys)
- sys.setdefaultencoding("utf-8")
- 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)]) # 输出清洗后的数据
5、 创建子表,用于存储清晰过后的数据
点击(此处)折叠或打开
- CREATE TABLE u_data_new (
- userid INT,
- movieid INT,
- rating INT,
- weekday INT)
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY '\t'
6、 添加python脚本:
hive (recommend)> add file /home/xxxx/transform.py;
7、查看是否添加成功
hive (recommend)> list files;
/home/xxxx/transform.py
8、 插入数据
将原数据表u_data中经过python脚本清洗后的数据,加载到子表u_data_new中
点击(此处)折叠或打开
- INSERT OVERWRITE TABLE u_data_new
- SELECT
- TRANSFORM (userid, movieid, rating, unixtime) --输入值(基表)
- USING 'python transform.py' --使用脚本清洗
- AS (userid, movieid, rating, weekday) --输出值(子表)
- FROM u_data
9、查询数据
查询新表u_data_new数据,并与基表u_data数据对比,执行:
select * from u_data_new limit 10;
select * from u_data limit 10;