我有以下类型的记录:
time | url
==========
34 google.com
42 cnn.com
54 yahoo.com
64 fb.com
我想在这些记录中添加另一列 time_diff
基本上取当前记录和前一记录的时间差。输出应如下所示:
time | url | time_diff
======================
34 google.com -- <can drop this row>
42 cnn.com 08
54 yahoo.com 12
64 fb.com 10
如果我可以添加另一列(与 time
)移动 time
如果42与34对齐,54与42对齐,依此类推,那么我可以取这些列之间的差来计算 time_diff
列。
我可以预测 time
列添加到新变量 T
如果我可以删除原始数据中的第一条记录,那么我就可以将它与 T
以获得期望的结果。
谢谢你的帮助。谢谢!
2条答案
按热度按时间qc6wkl3g1#
例如,看这个问题。你需要把元组放在一个袋子里(使用
GROUP ... ALL
在你的情况下),然后在一个嵌套的FOREACH
,ORDER
然后打电话给一个自定义项来给他们排名。等你有了这个军衔,你就可以FLATTEN
再次将包返回到一组元组中,您将有三个字段:time
,url
,和rank
. 一旦你有了这个,创建第四列rank-1
,对后两列进行自联接,就可以计算time_diff
.因为多个记录可以有相同的
time
,这将是一个好主意,也排序url
这样你每次都能得到相同的结果。e0bqpujr2#
我想你可以使用“铅”的功能的Pig。像下面这样的方法可能有用。
https://pig.apache.org/docs/r0.12.0/api/org/apache/pig/piggybank/evaluation/over.html