亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原(yuan)創(chuang)

Hive自定義函數實現

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

1,技術背景

       在使用(yong)Hive的(de)(de)過程(cheng)中,尤其是(shi)統計分析和數據分層清(qing)晰的(de)(de)場景(jing)下,有些自定(ding)義的(de)(de)業務(wu)場景(jing)使用(yong)自帶函(han)數無法實(shi)現(xian),就(jiu)需要借助自定(ding)義函(han)數實(shi)現(xian)特有業務(wu)邏輯。此(ci)篇大概講述下在hive里實(shi)現(xian)自定(ding)義函(han)數: 根據圖片的(de)(de)hash向(xiang)量計算其漢明(ming)距離。

2,Java 實現部分

根據兩張(zhang)圖片(pian)的16位16進制Hash向(xiang)量計(ji)算漢明距(ju)離。自定義函數需要實現(xian) org.apache.hadoop.hive.ql.exec.UDF 類(lei)。

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打包(bao)成.jar包(bao)文件(jian)(此處(chu)命(ming)名為:testUDF.jar)

 

3,在Hive中創建(jian)永久UDF

將(jiang). 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,總結

總體來說還是較簡單的,沒有難(nan)點。

0條評論
0 / 1000
不系舟
3文章數(shu)
0粉絲數
不系舟
3 文章 | 0 粉絲(si)
不系舟
3文(wen)章(zhang)數(shu)
0粉絲數
不系舟
3 文章(zhang) | 0 粉絲(si)
原創

Hive自定義函數實現

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

1,技術背景

       在(zai)使用Hive的過程中,尤其(qi)是(shi)統(tong)計(ji)分(fen)(fen)析和(he)數(shu)據分(fen)(fen)層清(qing)晰(xi)的場(chang)景下(xia),有(you)些自(zi)定(ding)義(yi)的業(ye)務場(chang)景使用自(zi)帶(dai)函(han)數(shu)無法實現(xian),就需(xu)要借助自(zi)定(ding)義(yi)函(han)數(shu)實現(xian)特有(you)業(ye)務邏(luo)輯。此篇大概講述下(xia)在(zai)hive里實現(xian)自(zi)定(ding)義(yi)函(han)數(shu): 根(gen)據圖(tu)片的hash向量計(ji)算其(qi)漢(han)明距離(li)。

2,Java 實現部(bu)分

根據兩張圖片的16位16進制Hash向量計算(suan)漢明距離(li)。自定義函數需要(yao)實(shi)現(xian) 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);
	}
}

將該部(bu)分Java打包(bao)成.jar包(bao)文件(此處命名為(wei):testUDF.jar)

 

3,在Hive中創建永(yong)久UDF

將(jiang). jar 導入HDFS 文件(jian)系統。

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,總結

總體(ti)來說(shuo)還是較(jiao)簡單(dan)的,沒有難點。

文章來自個人專欄
文章 | 訂(ding)閱
0條評論
0 / 1000
請輸入你的評論
0
0