2012-10-03 45 views
0

我在Apache的PIG以下關係。濾袋由父值在Apache的PIG

TSERIES: {ORDERED: {(timestamp: long,contentHost: chararray)},ts1: long} 

我要做到以下幾點:

F = foreach TSERIES { 
    ts = filter ORDERED by timestamp > TSERIES.ts1; 
    generate ts; 
} 

總之,我想保持與timestmap高於TS1, 但小豬不會允許有序包中的所有元素,特別是這部分ts = filter ORDERED by timestamp > TSERIES.ts1;

這可能嗎?我正在使用版本0.9.2-cdh4.0.1(cloudera)。

+0

是否TS1恰巧是任何機會,每個元組獨特之處? –

+0

我沒有強烈的保證,但我會說這是爲99%的獨特。因爲它是一個時間戳,沒有硬性規定是說,兩個時間戳不能在這種情況下(點擊流數據)完全一樣。 –

+0

我對豬0.14有同樣的問題。你有沒有找到一種方法來使它工作? –

回答

0

你有沒有嘗試過:

測試=過濾TSERIES通過(ordered.timestamp> TS1);

+0

不起作用,豬會在有序內查找ts1 –

0

我不知道是否有一種方法可以做到這一點沒有一個UDF ...好像應該有,但我不能算出它無論是。無論如何,你既可以寫一個UDF直接做到這一點:經過袋,過濾掉一些,並返回一個袋子。或者,你可以寫一個UDF生成的UUID,然後壓平袋並重新組了 - smoething這樣的:

a = foreach TSERIES generate ORDERED, ts1, myudfs.GenerateUUID() as id; 
b = foreach a generate FLATTEN(ORDERED) as ts, ts1, id; 
c = filter b by ts.timestamp > ts1; 
d = group c by id;