2016-04-15 91 views
0

我使用了存儲在String格式中的useragent字符串。Hive ua解析器UDF給出IOException

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 

我想從用戶代理字符串中提取瀏覽器。所以我用了ua-parser-java庫。

蜂巢UDF代碼如下:

public class BrowserInfo extends UDF{ 

    public Text evaluate(Text input) { 

     if(input == null) return null; 
     String uaString = input.toString(); 

     Parser uaParser= null; 
     try 
     { 
      uaParser = new Parser(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     Client c = uaParser.parse(uaString); 

     return new Text(c.userAgent.family); 
     } 
} 

它給了我下面的異常。

Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public org.apache.hadoop.io.Text dhruv.udf.BrowserInfo.evaluate(org.apache.hadoop.io.Text) 
on object [email protected] of class dhruv.udf.BrowserInfo 
with arguments {"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)":org.apache.hadoop.io.Text} of size 1 

試圖與String代替Text但得到相同的異常。 沒有配置單元這個代碼完美地工作。 更新: 沒有關於這個在hadoop或蜂巢日誌中的詳細信息。

回答

0

要解決的錯誤,你需要確保情侶東西 -

  1. regexes.yaml的存在於包裝.jar文件和路徑是正確的parser.java
  2. 所有相關罐子也打包在最終的.jar文件中。

希望這會有所幫助。