Java實現UDF函數
一、實現字符串到數字的轉換
package com.easyrong.data.function;
import org.apache.hadoop.hive.ql.exec.UDF;
public class NumberToChar extends UDF{
public static int byteToInt(byte b) {
//Java 總是把 byte 當做有符處理;我們可以通過將其和 0xFF 進行二進制與得到它的無符值
return b & 0xFF;
}
public static String evaluate(String s) {
String ssb="";
char[] charArray = s.toCharArray();
for(int i=0;i<charArray.length;i++) {
int byteAscii = byteToInt((byte)charArray[i]);
ssb=ssb+""+byteAscii;
}
return ssb;
}
}
二、打Jar包
右擊工程-export:
三、將jar上傳到服務器
四、添加jar,並且創建臨時函數
hive> add jar udf.jar;
Added [udf.jar] to class path
Added resources: [udf.jar]
hive> create temporary function NumberToChar as'com.easyrong.data.function.NumberToChar';
五、引用函數
hive> select student,course,score ,NumberToChar('adgatsyayahhjajajafjadsfsashgadfasd') from score;
OK
10 物理 120.0 9710010397116115121971219710410410697106971069710210697100115102115971151041039710010297115100
10 物理 120.0 9710010397116115121971219710410410697106971069710210697100115102115971151041039710010297115100
1 數學 100.0 9710010397116115121971219710410410697106971069710210697100115102115971151041039710010297115100
Python實現UDF函數
一、實現字符串到數字的轉換
# coding=utf-8
import sys
lst = []
for line in sys.stdin:
line = line.strip()
for i in line:
lst.append(str(ord(i)))
print("".join(lst))
二、將.py文件上傳服務器
三、調用函數
hive> select student,TRANSFORM ('sashgadfasd') USING "python NumberToChar.py" as (fname) from score;
注意:
使用transform的時候不能查詢別的列,比如:
select a,trans(b,c)
using "python NumberToChar.py"
as(d,e)
from score
這樣就是錯的,不能選擇a,如果需要a的話可以直接放到transform裏,然後將其不作處理,直接輸出即可。