2014-01-29 54 views
1

讓我們說,我想從一個UDF(延伸EvalFunc)返回地圖豬返回從UDF(Java)的一個地圖

地圖爲String(密鑰),對象(值)。這個對象是一些有4-5個String字段的類。

我知道,爲了回報這個複雜的地圖我需要重寫outputSchema。 但我無法弄清楚,什麼模式,我會回來。

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

public class myUDF extends EvalFunc { – user2277149

回答

2

你並不需要在這裏設置的模式。你只是返回一個單一的元素,map和豬就知道此基礎上exec方法的簽名。豬地圖不具有任何進一步的架構,因爲密鑰必須chararray類型的和值可以是任何數據類型。所以基本上它們始終是Map<String, Object>類型的對象。

如果你使用這個UDF,然後DESCRIBE你的別名,你應該看到,豬知道你已經返回地圖。

+0

這很有幫助,但是,您能指出我如何進一步處理豬的地圖(豬chararray)的正確方向嗎?我不確定接下來要做什麼...我甚至不能轉儲它看看它實際上是什麼樣子。 – joefromct