web-dev-qa-db-fra.com

Existe-t-il un opérateur de type IF conditionnel dans Apache PIG?

En fait, j'écris un script PIG et je veux exécuter un ensemble d'instructions si l'une des conditions est remplie.

J'ai placé une variable et vérifie une certaine valeur de cette variable. Supposer

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

Puis-je le faire dans PIG Script? Si oui, comment puis-je faire cela?

Merci.

16
Bhavesh Shah

Oui, Pig propose une construction if-then-else, mais elle n'est pas utilisée comme vous le demandez .

If-then-else de Pig est un opérateur arithmétique invoqué avec le raccourci "condition? True_value: false_value" dans le cadre d'une expression, comme:

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

Pour ce faire, vous devez déjà avoir chargé la table A. Pour exécuter le flux de contrôle autour d'instructions Pig entières, vous aurez besoin de quelque chose comme oozie , comme suggéré par Fakrudeen.

22
Will High

Vous pouvez créer un Python autour de votre script Pig. Voir Embedded Pig dans la documentation.

6
Lorand Bendig

Pig est un langage de flux de données et non un flux de contrôle. La seule construction qui se rapproche est PIG split , mais elle est très limitée.

Vous pouvez utiliser oozie et sa construction decision avec deux scripts pig.

5
Fakrudeen

Créez un UDF (disons, en Java), puis intégrez-le dans votre script PIG. Vous devrez "enregistrer" le fichier jar que vous générez après avoir écrit le UDF .

// (quelque chose comme ça), dites votre Java UDF class est UDFCondition et le fichier jar généré est PigUDFCondition.jar, puis dans votre PIG Code

s'inscrire PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...)
1
Rahul Dhond

Une déclaration CASE est disponible à partir de la version 0.12.

0
ganeshrj