2017-10-17 32 views

Répondre

0

vous pouvez créer udfs de porc dans Eclipse

créer un projet Eclipse avec des pots de porc et essayer ci-dessous le code

package com; 

import java.io.IOException; 

import org.apache.pig.EvalFunc; 
import org.apache.pig.backend.executionengine.ExecException; 
import org.apache.pig.data.Tuple; 



public class Age extends EvalFunc<String>{ 

    @Override 
    public String exec(Tuple a) throws IOException { 
     // TODO Auto-generated method stub 
     if(a == null || a.size() == 0){ 
      return null; 
     } 
     try{ 
      Object object = a.get(0); 
      if(object == null){ 
       return null; 
      } 
      int i = (Integer) object; 
      if(i >= 10 && i <= 20){ 
       return "10-20"; 
      } 
      else if (i >= 21 && i <= 30){ 
       return "20-30"; 
      } 
      else 
       return ">30"; 
     } catch (ExecException e){ 
      throw new IOException(e); 
     } 
    } 

} 

maintenant export le projet en tant que pot et l'enregistrer dans la coquille de cochon

REGISTER <path of your .jar file> 

Définissez-le avec le paquet et la classe.

DEFINE U com.Age(); 

a = LOAD '<input path>' using PigStorage(',') as (id:int,name:chararray,age:int); 

b = FOREACH a GENERATE id,name,age,U(age); 
1

Vous pouvez le faire sans UDF. En supposant que vous avez chargé les données à une relation A.

B = FOREACH A GENERATE A.Id,A.name,A.age,(A.age%5 == 0 ? A.age-5 : (A.age/5)*5) as lower_age,(A.age%5 == 0 ? A.age : ((A.age/5)*5) + 5) as upper_age; 
C = FOREACH B GENERATE B.Id,B.name,B.age,CONCAT(CONCAT((chararray)lower_age,'-'),(chararray)upper_age); 
DUMP C; 
+0

Merci pour vos entrées pouvez-vous s'il vous plaît laissez-moi savoir le processus UDF pour l'exigence ci-dessus. –