通过猪的时间戳获取最后一行

Ani*_*der 3 apache-pig

我有一些缓慢变化的元数据,实时存储在HDFS上.我想编写一个猪作业,将这些行压缩到每个键的最新行.

例如,对于这些数据(为清晰起见添加了列标题):

ts   meta   key
--   ----   ---
1    foo    id1
2    que    id2
3    que    id2
4    foo    id1
5    pasa   id2
6    pasa   id2
7    foo    id1
8    pasa   id2
9    pasa   id2
10   pasa   id2
11   pasa   id2
12   hombre id2
13   foo    id1
14   foo    id1
15   hombre id2
16   bar    id1
17   bar    id1
18   bar    id1
19   bar    id1
20   bar    id1
Run Code Online (Sandbox Code Playgroud)

我希望得到输出:

15   hombre id2
20   bar    id1
Run Code Online (Sandbox Code Playgroud)

我刚刚开始学习猪拉丁文的来龙去脉 - 有没有一种内置的方法可以在猪或某些图书馆中做到这一点,或者我应该考虑编写一个UDF?

reo*_*toa 6

这是嵌套foreach的好地方:

A = LOAD '$input' AS (ts:int, meta:chararray, key:chararray);
B =
    FOREACH (GROUP A BY key) {
        byts = ORDER A BY ts DESC;
        newest = LIMIT byts 1;
        GENERATE FLATTEN(newest);
    };
Run Code Online (Sandbox Code Playgroud)

测试您的数据(我将其转换为制表符分隔):

(20,bar,id1)
(15,hombre,id2)
Run Code Online (Sandbox Code Playgroud)

使用此方法,即使您有两行具有最新时间戳,您也可以保证每个键只有一行(尽管这可能与您的数据无关).