假设我想从UDF返回一个Map(扩展EvalFunc)
Map是String(Key),Object(value)。这个Object是一些具有4-5个String字段的类。
我知道为了返回这个复杂的Map,我需要覆盖outputSchema。 但我无法弄清楚Schema将会返回什么。
public class myUDF extends EvalFunc<Map>{
public Map exec(Tuple input) throws IOException{
Map<String, myClass> map = new HashMap<String, myClass>();
// Create a Map
return map;
}
public Schema outputSchema(Schema input){
try{
return new Schema... // How I will define my Schema
}
catch(FrontendException e){
return null;
}
}
public myClass{
String field1; String field2; String field3;
// getters and Setters
}
谢谢和问候, 阿比纳夫
答案 0 :(得分:2)
您无需在此处设置架构。您只是返回一个元素map
,而Pig将根据exec
方法的签名知道这一点。 Pig中的地图没有任何进一步的模式,因为键必须是chararray
类型,并且值可以是任何数据类型。所以基本上它们总是Map<String, Object>
类型的对象。
如果您使用此UDF,然后使用DESCRIBE
别名,您应该会看到Pig知道您已经返回了地图。