我把useragent字符串存储在 String
格式。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
我想从用户代理字符串中提取浏览器。所以我使用了ua解析器java库。
配置单元自定义项代码如下:
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 dhruv.udf.BrowserInfo@5379d8 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
但也有同样的例外。没有Hive,这段代码工作得很好。更新:hadoop或hive的日志中没有关于这个的详细信息。
1条答案
按热度按时间4uqofj5v1#
要解决错误,需要确保以下几点-
regexes.yaml存在于打包的.jar文件中,其路径在parser.java中是正确的
所有依赖的jar也打包在final.jar文件中。
希望这有帮助。