searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Hive自定义函数实现

2023-08-16 09:46:08
4
0

1,技术背景

       在使用Hive的过程中,尤其是统计分析和数据分层清晰的场景下,有些自定义的业务场景使用自带函数无法实现,就需要借助自定义函数实现特有业务逻辑。此篇大概讲述下在hive里实现自定义函数: 根据图片的hash向量计算其汉明距离。

2,Java 实现部分

根据两张图片的16位16进制Hash向量计算汉明距离。自定义函数需要实现 org.apache.hadoop.hive.ql.exec.UDF 类。

public class HanmingCal extends UDF{
	public Integer evaluate(String imgAHash, String imgBHash){
		// 空串不处理
		if(imgAHash == null || imgBHash == null){
			return null;
		}
		// 定长
		if(imgAHash.trim().length() != 16 || imgBHash.trim().length() != 16){
			return null;
		}
		
		// 将16位Hash向量转成64位的二进制字符串
		String imgABin = hexToBinary(imgAHash);
		String imgBBin = hexToBinary(imgBHash);
		
		// 使用异或算法计算汉明距离
		return getHammingDistance(imgABin, imgBBin);
	}
}

将该部分Java打包成.jar包文件(此处命名为:testUDF.jar)

 

3,在Hive中创建永久UDF

将. jar 导入HDFS 文件系统。

hadoop fs -put testUDF.jar /user/hive/udf/

创建UDF。

hive> create function hanmingCal as 'test.udf.HanmingCal' using jar 'hdfs://hadoop:8020/user/hive/udf/testUDF.jar';

测试。

hive> select hanmingCal('0113ae06f6feef5e','0112af05b7dece1c') from default.dual

其它操作。

# 查看所有函数
hive> show functions;
# 删除函数
hive> drop function hanmingCal;

 

4,总结

总体来说还是较简单的,没有难点。

0条评论
0 / 1000
不系舟
3文章数
0粉丝数
不系舟
3 文章 | 0 粉丝
不系舟
3文章数
0粉丝数
不系舟
3 文章 | 0 粉丝
原创

Hive自定义函数实现

2023-08-16 09:46:08
4
0

1,技术背景

       在使用Hive的过程中,尤其是统计分析和数据分层清晰的场景下,有些自定义的业务场景使用自带函数无法实现,就需要借助自定义函数实现特有业务逻辑。此篇大概讲述下在hive里实现自定义函数: 根据图片的hash向量计算其汉明距离。

2,Java 实现部分

根据两张图片的16位16进制Hash向量计算汉明距离。自定义函数需要实现 org.apache.hadoop.hive.ql.exec.UDF 类。

public class HanmingCal extends UDF{
	public Integer evaluate(String imgAHash, String imgBHash){
		// 空串不处理
		if(imgAHash == null || imgBHash == null){
			return null;
		}
		// 定长
		if(imgAHash.trim().length() != 16 || imgBHash.trim().length() != 16){
			return null;
		}
		
		// 将16位Hash向量转成64位的二进制字符串
		String imgABin = hexToBinary(imgAHash);
		String imgBBin = hexToBinary(imgBHash);
		
		// 使用异或算法计算汉明距离
		return getHammingDistance(imgABin, imgBBin);
	}
}

将该部分Java打包成.jar包文件(此处命名为:testUDF.jar)

 

3,在Hive中创建永久UDF

将. jar 导入HDFS 文件系统。

hadoop fs -put testUDF.jar /user/hive/udf/

创建UDF。

hive> create function hanmingCal as 'test.udf.HanmingCal' using jar 'hdfs://hadoop:8020/user/hive/udf/testUDF.jar';

测试。

hive> select hanmingCal('0113ae06f6feef5e','0112af05b7dece1c') from default.dual

其它操作。

# 查看所有函数
hive> show functions;
# 删除函数
hive> drop function hanmingCal;

 

4,总结

总体来说还是较简单的,没有难点。

文章来自个人专栏
不系舟
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0