从Pig中的另一行中减去一行的值

时间:2013-03-22 15:31:45

标签: hadoop apache-pig

我正在尝试使用Pig开发一个示例程序来分析一些日志文件。我想分析不同工作的运行时间。当我读到作业的日志文件时,我得到了作业的开始时间和结束时间,如下所示:

(Wed,03/20/13,01:03:37,EDT)
(Wed,03/20/13,01:05:00,EDT)

现在,为了计算经过的时间,我需要减去这两个时间戳,但由于两个时间戳都在同一个包中,我不知道如何比较它们。所以我正在寻找如何做到这一点的想法。谢谢!

1 个答案:

答案 0 :(得分:2)

两个日志行中的作业是否都有唯一的ID?还有什么东西可以指示哪个事件开始,哪个事件结束?

如果是这样,您可以读取数据集两次,一次用于开始事件,一次用于结束事件,并将两者连接在一起。然后你将有一个记录包含两个事件。

这样:

A = FOREACH logline GENERATE id, type, timestamp;
START = FILTER A BY (type == 'start');

END = FILTER A  BY (type == 'end');

JOINED = JOIN START by ID, END by ID;

DIFF = FOREACH JOINED GENERATE (START.timestamp - END.timestamp); // or whatever;