我试图从一个组中选择共享同一密钥的多个记录,但不确定如何筛选此记录。
例如,使用以下数据:
D120130701,m1,v1
D120130701、m2、v2
D120130702、m1、v3
D120130703,m1,v4
D120130703,m2,v5
D220130701、m1、v1
D220130702、m1、v3
D220130703、m1、v4
以及load语句:
A = load '/home/hduser/t.csv'
using PigStorage(',')
as (
device:chararray,
dt:chararray,
metric:chararray,
value:chararray
);
C = group A by (device, dt);
生产:
((D120130701),{(D120130701,m1,v1),(D120130701,m2,v2)})
((D120130702),{(D120130702,m1,v3)})
((D120130703),{(D120130703,m1,v4),(D120130703,m2,v5)})
((D220130701),{(D220130701,m1,v1)})
((D220130702),{(D220130702,m1,v3)})
((D220130703),{(D220130703,m1,v4)})
问题是我应该做什么来过滤掉这样我只得到粗体的行,逻辑是每个设备(d1/d2…),给我最低日期的行?
如果我只按设备分组:
B = group A by device;
我得到以下两行:
(d1,{(D120130701,m1,v1),(D120130701,m2,v2),(D120130702,m1,v3),(D120130703,m1,v4),(D120130703,m2,v5)})
(d2,{(D220130701,m1,v1),(D220130702,m1,v3),(D220130703,m1,v4)})
但是我不能在foreach中使用limit,因为每个设备的记录数是可变的。
有什么想法吗?对Pig来说相当新鲜!
非常感谢。
1条答案
按热度按时间xxhby3vn1#
一种方法是
i/p是
d1 20130701 m1 v1 d1 20130701 m2 v2
d1 20130702 m1第3版
d1 20130703 m1第4版
d1 20130703平方米v5
d2 20130702 m1第3版
d2 20130703 m1第4版
输出为
(D120130701、m1、V120130701)
(D120130701,m2,V220130701)
(D220130702,m1,V320130702)