Birden fazla Domuz UDF tanımlamak istiyorum. Her biri verilerin farklı bir bölümünü çıkaracak. Benim durumumda, veri birçok iç içe JSON nesnesi içeren karmaşık bir yapıya sahip JSON belgeleridir.Domuz: Bir sınıfta birden fazla UDF
Sorun şu ki, ihtiyacım olan her işlev için farklı bir Eval sınıfı oluşturdum. Bu sınıfların her biri exec() uygular. Tüm fonksiyonları aynı UDF sınıfına koymanın ve onları domuzdan çağırmanın bir yolu var mı? Benim UDF birinin
Örnek:
public class PigGetTimestamps extends EvalFunc<Tuple>{
public Tuple exec(org.apache.pig.data.Tuple input) throws IOException {
if (input == null || input.size() == 0){
return null;
}
try {
String inputString = DataType.toString(input.get(0));
try
{
String[] tokens=inputString.split("\t");
if (tokens.length<1)
return null;
Document document=new Document(tokens[0], true, false);
long timestamp_fetch=document.getTimestamp_fetch();
long timestamp_pub=document.getTimestampPub();
Tuple output = TupleFactory.getInstance().newTuple(2);
output.set(0,timestamp_pub);
output.set(1,timestamp_fetch);
return output;
}
catch(Exception e)
{
return null;
}
} catch (Exception e) {
System.out.println("Can't extract field; error = " + e.getMessage());
return null;
}
}
Herhangi bir standart yol var mı, sonucu alabilirsin ama bu bir hack – Athar