前言
hive数据库对比较ip的大小,一般保存ip为字符串,字符串比较默认字典顺序,比如192.168.1.65和192.168.1.123比较,得出结果为192.168.1.65大,不符合我们的预期,所以编写udf先转换为long类型的数字然后再比较。
一、java代码如下
package com.ola;
import org.apache.hadoop.hive.ql.exec.UDF;
public class MyUdfTpToLong extends UDF {
public long evaluate(String strIp) {
String[]ip = strIp.split("\\.");
return (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8) + Long.parseLong(ip[3]);
}
}
集群cdh6.3.1,hive版本2.1.1,hadoop版本3.0.0,可以直接编译好的包使用,地址
https://download.csdn.net/download/qq406881161/85465894
二、打包上传到hive并注册函数
#1、上传文件
hdfs dfs -put myudf-1.0.jar /user/hive/jars/
#2、创建函数
create function IpToLong as "com.ola.MyUdfTpToLong" using jar 'hdfs:///user/hive/jars/myudf-1.0.jar';
#3、针对有设置运行队列的集群,此步骤可跳过
set mapred.job.queue.name=hive;
#4、测试结果
select IpToLong('192.168.1.1');
三、hue中使用案例

然后正常写sql就可以了
总结
这个就是UDF的快速入门和解析IP的一个小案例,不喜勿喷。

1040

被折叠的 条评论
为什么被折叠?



