2016-06-28 4 views
0

У меня 3 колонки, которые содержат start_time, end_time и tags. Времена представлены в формате времени в формате, как показано в примере ниже. Я хочу найти строки, которые имеют 1-часовую разницу во времени между ними.Разница во времени эпохи в свинге

Пример:

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

мне нужно извлечь столбец теги, если время Diff меньше чем за час.

Я хочу сделать это в PIG - может ли кто-нибудь любезно помочь?

+0

Мы можем любезно помочь вам, если вы можете любезно предоставить свои усилия для достижения надлежащего результата. – madbitloman

ответ

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; 

можно фильтровать строки на основе вашего состояния, как>, <, ==

+0

Спасибо, но мне нужно позвонить/определить любой UDF для GetHour? – Pradeep

+0

GetHour() уже в свинье –

+0

Я попытался DUMP выход из отношения B, я получаю неправильные значения .. как описано B; B: {StartTime: datetime, EndTime: datetime} DUMP B; (1970-01-15T00: 03: 20.081-07: 00,1970-01-15T00: 03: 20.501-07: 00) – Pradeep

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 требует отметки времени до миллисекунд, поэтому вы должны просто умножить свои поля даты на 1000 перед использованием этого UDF.

Смежные вопросы