猪的大纪元时差

时间:2016-06-28 07:35:14

标签: time apache-pig difference epoch

我有3列,其中包含start_timeend_timetags。时间以纪元时间格式表示,如下面的示例所示。我想找到它们之间有1小时时差的行。

示例:

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

如果时间差小于一小时,我需要获取标签列。

我想在PIG中这样做 - 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

input.txt中

1235000081  1235000501  Answered
1235000081  1235000551  Answered

猪脚本

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;

您可以根据条件过滤行,例如>,< ,==

答案 1 :(得分:0)

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

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即可。