hive的udf函式
阿新 • • 發佈:2021-09-15
首先是要引入依賴
<dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.4</version> </dependency> </dependencies>
在maven的conf/settings設定源:阿里雲的是一直在用的,我是直接加了進去,可以直接用。
<mirrors> <mirror> <id>mirror</id> <mirrorOf>!rdc-releases,!rdc-snapshots</mirrorOf> <name>mirror</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> <mirror> <id>nexus-osc</id> <mirrorOf>central</mirrorOf> <name>Nexus osc</name> <url>http://maven.oschina.net/content/groups/public/</url> </mirror> </mirrors>
一定要繼承UDF介面,重寫evaluate方法,名字一定是evaluate;
public class HelloUDF extends UDF { public Text evaluate( Text s) { if (s == null) { return null; } StringBuilder ret = new StringBuilder(); String[] items = s.toString().split("\\."); if (items.length != 4){ return null; } for (String item : items) { StringBuilder sb = new StringBuilder(); int a = Integer.parseInt(item); for (int i=0; i<8; i++) { sb.insert(0, a%2); a = a/2; } ret.append(sb); } return new Text(ret.toString()); }
maven打包,clean,complie,package;
複製路徑,選擇類,點選copyprefence;
進入hive,把jar包上傳到一個路徑,在hive裡新增jar包:
add jar /路徑/xxx.jar
list jar;展示新增的jar包,
show functions,展示列表的函式;
建立臨時函式
語法:CREATE TEMPORARY FUNCTION function_name AS class_name;
function_name函式名
class_name 類路徑,包名+類名(複製的路徑,就是copy prefence)
hive> create temporary function ipcastas 'HelloUDF'; OK Time taken: 0.087 seconds hive>
刪除臨時函式
語法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
hive> DROP TEMPORARY FUNCTION IF EXISTS ipcast; OK Time taken: 0.015 seconds hive>