python datetime时间差_Python脚本实现数据处理(官方实例)

官网示例

3c4d4beeda004ac3f7c5c9c14785e981.png

官网地址:

0eea5bdad0a8275155a6e07a8e5c30d6.png

下载数据

wget

我们下载好数据

f8c2fef29a8916387cf132381c93ccab.png

安装unzip

yum install -y unzip

66a10229ee45f379cdf6b42108379220.png

解压数据

d1275d9dacec67f0fa9a0873c4348f24.png

创建库

7c08c508ba6e8216c73cea1313b9f20d.png

创建表

CREATE TABLE u_data (

userid INT,

movieid INT,

rating INT,

unixtime STRING)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ''

STORED AS TEXTFILE;

15bda3534b08d2435b275d227ca4a0dd.png

加载数据

LOAD DATA LOCAL INPATH '/data/ml-100k/u.data' OVERWRITE INTO TABLE u_data;

79942cbb3277b6289da168bfa6766186.png

查看下数据

select * from u_data limit 10;

705935c647457284de967a73385726e1.png

编写python脚本,创建文件weekday_mapper.py,编写下面代码

import sys

import datetime

for line in sys.stdin:

line = line.strip()

userid, movieid, rating, unixtime = line.split('')

weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()

print ''.join([userid, movieid, rating, str(weekday)])

e32f1c59c79a60fe1109f456b2a0eba8.png

创建结果表

CREATE TABLE u_data_new (

userid INT,

movieid INT,

rating INT,

weekday INT)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '';

b5b85a5ae8d69cb99802416d92b3ca2e.png

添加文件

add FILE /data/weekday_mapper.py;

6b9c3e5463f2d3aa540ffecf559749bd.png

插入数据

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;

76e727cb54c1866bf50e4f76dcb5d102.png

查询结果

SELECT weekday, COUNT(*)

FROM u_data_new

GROUP BY weekday;

ec796daaba92d6f12745518a80e50a35.png

就可以看到结果了,周一评论量12254,后面依次类推得到信息

523e427345bcd0f43684ab0396293536.png

再看下常见的时间格式

Hive的自带的时间函数,利用show functions;

查看下面两个函数:

unix_timestamp(转换为时间戳)unix_timestamp,以格林威治时间为基准

from_unixtime (转换为标准时间格式)

这些时间准确表达可以分析网站后台日志数据,统计用户停留时间等。比如查看两条时间的时间差,先转换为统一unix时间戳,再相减就能得到

测试

select unix_timestamp("2015-08-31 00:04:37");

01c8e19fc65984a1eea5bb6438dfdbb5.png

如果使用下面

select unix_timestamp("20150831000437");

select unix_timestamp("20150831 000437");

运行之后null,无法识别格式

0e3740211e121cff1cebde2ab172be78.png

指定格式进行转换,

select unix_timestamp("20150831000437","yyyyMMddHHmmss");

b1d029094bc8321785dbbdeca63bf505.png

select unix_timestamp("20150831000437","yyyyMMdd HHmmss");这样也不可以

9fb1f1ca433a4405f7a1a72d858e73a4.png

将Unix时间戳转换为标准时间格式

select from_unixtime(1440950677);

59c03c86da959a5aca3b077df4a19ff5.png

这次就可以

select from_unixtime(1440950677,"yyyyMMdd HHmmss");

f297a13332a8608e54982afc703b74e6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值