编写UDF转换IP为Long类型数字

前言

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的一个小案例,不喜勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值