注 后来为了能在外部更新文件,我将其放在了HDFS 上,和AnsjSeg 中的代码一样
第五步:创建UDF 并使用 add jar /Users/liuwenqiang/workspace/code/idea/HiveUDF/target/HiveUDF-0.0.4.jar; create temporary function ansjSeg as 'com.kingcall.bigdata.HiveUDF.AnsjSeg'; select ansjSeg("我是字符串,你是啥"); -- 开启停用词过滤 select ansjSeg("我是字符串,你是啥",1); create temporary function ikSeg as 'com.kingcall.bigdata.HiveUDF.IknalyzerSeg'; select ikSeg("我是字符串,你是啥"); select ikSeg("我是字符串,你是啥",1);上面方法的第二个参数,就是是否开启停用词过滤,我们使用ikSeg函数演示一下
下面我们尝试获取一下函数的描述信息
如果没有写的话,就是下面的这样的
其它应用场景通过编写Hive UDF可以轻松帮我们实现大量常见需求,其它应该场景还有:
ip地址转地区:将上报的用户日志中的ip字段转化为国家-省-市格式,便于做地域分布统计分析;
使用Hive SQL计算的标签数据,不想编写Spark程序,可以通过UDF在静态代码块中初始化连接池,利用Hive启动的并行MR任务,并行快速导入大量数据到codis中,应用于一些推荐业务;
还有其它sql实现相对复杂的任务,都可以编写永久Hive UDF进行转化;
总结这一节我们学习了一个比较常见的UDF,通过实现GenericUDF 抽象类来实现,这一节的重点在于代码的实现以及对GenericUDF类中方法的理解
上面的代码实现上有一个问题,那就是关于停用词的加载,就是我们能不能动态加载停用词呢?