2013-07-16 10 views
14

Attualmente sto scrivendo PIG Script e voglio eseguire alcune serie di istruzioni se una delle condizioni è soddisfatta.Esiste un operatore IF condizionale in Apache PIG?

Ho impostato una variabile e controllo per un certo valore di quella variabile. Supponiamo che

if flag==0 then 
    A = LOAD 'file' using PigStorage() as (f1:int, ....); 
    B = ...; 
    C = ....; 
else 
    again some Pig Latin statements 

Posso farlo in PIG Script? Se sì, allora come posso fare questo?

Grazie.

+0

Mi sono imbattuto in un operatore condizionale in Pig Latin come (a == b? C1: c2) ;. Ma come posso inserire la maggior parte delle dichiarazioni dei suini tra queste? –

+0

Bhavesh, È necessario scrivere un wrapper per questo L'approccio consigliato per scrivere programmi con logica condizionale o costrutti loop consiste nell'incastrare Pig Latin in un'altra lingua come Python, JavaScript o Java e gestire il flusso di controllo da lì. – Nag

risposta

4

È possibile creare un wrapper Python attorno allo script Pig. Vedi Embedded Pig nei documenti.

3

Pig è un linguaggio di flusso di dati che non controlla il flusso. Solo il costrutto che si avvicina è PIG split, ma è molto limitato.

È possibile utilizzare oozie e il suo decision costruire con due script di maiale.

22

Sì, maiale non offre una costruzione if-then-else, ma non viene utilizzato nel modo che stai chiedendo.

Pig di if-then-else is an arithmetic operator invocato con l'abbreviazione "condizione true_value:? False_value" come parte di un'espressione, come ad esempio:

X = FOREACH A GENERATE f2, (f2==1?1:COUNT(B)); 

devi avere già caricato la tabella A per fare questo . Per eseguire il flusso di controllo attorno alle istruzioni Pig complete è necessario qualcosa come oozie, come suggerito da Fakrudeen.

+0

Funziona per condizioni basate sui dati in elaborazione, ma non su condizioni/flag basati su parametri esterni. –

1

Creare un UDF (ad esempio, in Java) e quindi incorporare che nella vostra sceneggiatura PIG. Sarà necessario "registrare" il file jar generato dopo aver scritto l'UDF UDF.

// (qualcosa di simile), dire la vostra Java UDF class è UDFCondition & il file generato jar è PigUDFCondition.jar, quindi nel vostro registro PIG Code

PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...) 
0

C'è una dichiarazione CASE disponibile dalla versione 0.12 in poi.

+0

E come sarebbe questo aiuto? Potresti estendere la tua risposta con un esempio? – dakab