Hive之UDF实现

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里,然后将其不作处理,直接输出即可。

发布了35 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/colby_chenlun/article/details/100578056