从猪中返回UDF(Java)中的映射

时间:2014-01-29 04:43:05

标签: java map apache-pig

假设我想从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

}  

谢谢和问候, 阿比纳夫

1 个答案:

答案 0 :(得分:2)

您无需在此处设置架构。您只是返回一个元素map,而Pig将根据exec方法的签名知道这一点。 Pig中的地图没有任何进一步的模式,因为键必须是chararray类型,并且值可以是任何数据类型。所以基本上它们总是Map<String, Object>类型的对象。

如果您使用此UDF,然后使用DESCRIBE别名,您应该会看到Pig知道您已经返回了地图。