我有3列,其中包含start_time
,end_time
和tags
。时间以纪元时间格式表示,如下面的示例所示。我想找到它们之间有1小时时差的行。
示例:
Start_time End_Time Tags
1235000081 1235000501 "Answered"
1235000081 1235000551 "Answered"
如果时间差小于一小时,我需要获取标签列。
我想在PIG
中这样做 - 有人可以帮忙吗?
答案 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即可。