2016-08-25 5 views
0

In Pig, ich habe die Anforderung zu setzen avail_until als nächste Datensätze 'avail_since gegeben eine bestimmte ID und default es 9999-12-31 für den letzten Datensatz einer bestimmten ID . Ich beginne damit, die Daten per ID und dann Avail_Since zu bestellen, stehe aber danach fest. Ich denke, ich brauche vielleicht eine Über/Stich/Lead/Lag-Funktion, aber nicht sicher. Jede Hilfe würde sehr geschätzt werden!Apache PIG - Datum der aktuellen Zeile als nächste Datensätze Datum

Eingabedaten:

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 

Erforderlich Ergebnis:

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 

Antwort

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; 

Hope this helfen !!!

+0

Hallo Ankur, vielen Dank dafür! Ich werde definitiv versuchen, dies in mein Problem zu integrieren. aber, und es tut mir leid, ich habe vergessen zu erwähnen, dass ich mehrere IDs habe, also muss ich irgendwie eine Gruppe per ID in diese einbeziehen. Wären Sie in der Lage, die Antwort leicht zu bearbeiten, so dass sie dieselbe Funktion ausführen kann, gruppiert nach IDs? – hm25252

Verwandte Themen