Hadoop 如何在Pig中过滤时间戳

Hadoop 如何在Pig中过滤时间戳,hadoop,nosql,apache-pig,Hadoop,Nosql,Apache Pig,我有一个具有此架构的表: (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.

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

(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;
}

但是,猪代码似乎不起作用,所以有谁能给我一个建议,使这个代码的工作

您是否尝试过按
ts
降序排序

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

您是否尝试过按
ts
降序排序

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

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

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

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

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