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

Posted

技术标签:

【中文标题】从 Pig 中的另一行减去一行的值【英文标题】:Subtract One row's value from another row in Pig 【发布时间】:2013-03-22 15:31:45 【问题描述】:

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

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

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

【问题讨论】:

看起来这个人也有同样的问题:***.com/a/15222459/1928660 【参考方案1】:

两个日志行中的作业是否有唯一 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;

【讨论】:

以上是关于从 Pig 中的另一行减去一行的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?

如何在 Pig 中检索前一行的值

PIG:标量在输出中有不止一行

从r中矩阵的每一行中减去一个常数向量

如何将一个表中的行合并到另一个表中的另一行

如何从熊猫数据框中的当前行中减去前一行并将其应用于每一行;不使用循环?