如何在pig中过滤时间戳

ccgok5k5  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(285)

我有一个具有此架构的表:

(id: chararray, ts: long, data: chararray)

其中ts代表时间戳,用unix时间存储;
因为数据将更新,如果发生更新,ts将被修改,所以id不会更改。但所有这些旧记录和新记录都将存储在hdfs中。
我只想看看最新的数据,所以我写了Pig代码如下:

grp = GROUP table BY id;

rst = FOREACH grp {
    latest = FILTER table BY ts == MAX(table.ts);
    GENERATE latest.id AS id,
             latest.data AS data;
}

但似乎Pig代码没有工作,所以有人可以给我一个建议,使这个代码的工作?

4ktjp1zp

4ktjp1zp1#

我不知道为什么这不起作用,但是写一个udf来实现这一点也不难。只需输入一袋元组,循环它们,并返回时间戳最大的元组。然后你可以做:

grp = GROUP table BY id;
latest = FOREACH grp GENERATE my.udfs.LatestInBag(table);
mefy6pfw

mefy6pfw2#

你试过点菜吗 ts 按降序排列?

LATEST = LIMIT (ORDER table BY ts desc) 1;
dump LATEST;

相关问题