2016-08-25 58 views
0

在Pig中,我有要求將avail_until設置爲下一條記錄'avail_since給出特定的id,並將其默認爲9999-12-31以指定id的最後一條記錄。我開始通過ID訂購數據,然後Avail_Since,但在此之後卡住了。我想我可能需要一個超/針/鉛/滯後功能,但不確定。任何幫助將不勝感激!Apache PIG-將當前行的當前日期設置爲下一個記錄日期

輸入數據:

ID  AVAIL_SINCE AVAIL_UNTIL 
1  19-Jan-00  31-Dec-99 
1  11-Jun-00  31-Dec-99 
1  4-Aug-00  31-Dec-99 
1  19-May-01  31-Dec-99 
2  5-May-02  31-Dec-99 
2  8-Apr-03  31-Dec-99 
3  10-Jun-00  31-Dec-99 
3  31-Oct-00  31-Dec-99 
3  29-Dec-00  31-Dec-99 

要求的結果:

ID  AVAIL_SINCE AVAIL_UNTIL 
1  19-Jan-00  11-Jun-00 
1  11-Jun-00  4-Aug-00 
1  4-Aug-00  19-May-01 
1  19-May-01  31-Dec-99 
2  5-May-02  8-Apr-03 
2  8-Apr-03  31-Dec-99 
3  10-Jun-00  31-Oct-00 
3  31-Oct-00  29-Dec-00 
3  29-Dec-00  31-Dec-99 

回答

0
--load file  
    A = load 'pdemo/sample1' 
    using PigStorage(',') 
    as(id:int,date1:chararray,date2:chararray); 

    --Generate alternate record except last row. 
    B = RANK A; 
    C = foreach B generate rank_A-1,date1,date2; 
    J = join B by rank_A,C by $0; 
    result = foreach J generate B::id as ID,B::date1 as AVAIL_SINCE,C::date1 as AVAIL_UNTIL; 


    --Extract the last row 
    grp = group B all; 
    maxr = foreach grp generate MAX(B.rank_A); 
    ij1 = join B by rank_A,maxr by $0; 
    last_row = foreach ij1 generate B::id as ID,B::date1 as AVAIL_SINCE,B::date2 as AVAIL_UNTIL; 

    Final_result = union result,last_row; 

希望這將幫助!

+0

您好,非常感謝您的支持!我一定會嘗試將其納入我的問題。然而,我很抱歉,我忘了包括我有多個ID的,所以我需要包括一個由ID編組到某個地方。你能稍微編輯答案,以便它可以執行由ID的分組相同的功能? – hm25252

相關問題