pig中的纪元时差

drkbr07n  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(450)

我有3列包含 start_time , end_time 以及 tags . 时间以历元时间格式表示,如下例所示。我想找出它们之间有1小时时差的行。
例子:

Start_time     End_Time    Tags
1235000081    1235000501  "Answered"
1235000081    1235000551  "Answered"

如果时间差小于一个小时,我需要获取tags列。
我想在家里做 PIG -有人能帮忙吗?

wz3gfoph

wz3gfoph1#

如果要将日期字段保留为时间戳,解决方案如下:

data =  LOAD '/path/to/your/input' as (Start_Time:long, End_Time:long, Tags:chararray);
data_proc = FOREACH data GENERATE *, ToDate(Start_Time*1000) as Start_Time,ToDate(End_Time*1000) as End_Time;    
output = FILTER data_proc BY GetHour(End_Time)-GetHour(Start_Time) == 1;   
Dump @;

最关键的一点是pig todate udf需要一个高达毫秒精度的时间戳,因此在使用这个udf之前,只需将日期字段乘以1000即可。

xwmevbvl

xwmevbvl2#

输入文件

1235000081  1235000501  Answered
1235000081  1235000551  Answered

Pig手稿

A =  Load '/home/kishore/input.txt' as (col1:long, col2:long, col3:chararray);
B = Foreach A generate ToDate(col1) as startdate,ToDate(col2) as enddate,col3;    
C = Filter B by GetHour(enddate)-GetHour(startdate) == 1;   
Dump C;

您可以根据自己的条件筛选行,如>、<==

相关问题