您的位置:首页 > 编程语言

Hive中UDF编程

2016-11-22 21:47 423 查看

开发 UDF 步骤,实现小写转大写

pom.xml 加入Hive 依赖JAR包

创建类

继承UDF

方式名称: evaluate

返回值不能为null

一定要测试

代码

package om.beifeng.bigdata;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

/**
*
* Step 1:
*      1. Implement one or more methods named "evaluate" which will be called by Hive.
*      2."evaluate" should never be a void method. However it can return "null" if needed.
*
*/
public class LowUDF extends UDF{

/**
* 实现单词转换为小写字母
*
* @param str
* @return
*/
public Text evaluate(Text str){
// invalidate
if(null == str){
return null ;
}

if(StringUtils.isBlank(str.toString())){
return null ;
}
// 转小写
return new Text(str.toString().toLowerCase()) ;
}

public static void main(String[] args) {
System.out.println(new LowUDF().evaluate(new Text("HADOOOOO")));
}
}


使用

上传jar包到/opt/datas下



加载JAR包到CLASSPATH下面:
add jar /opt/datas/senior-hive-1.0-SNAPSHOT.jar




创建临时函数:



使用:select ename,my_lower(ename) xx from emp;



0.13版本以后创建永久函数

dfs -put /opt/datas/senior-hive-1.0-SNAPSHOT.jar /user/beifeng/;
CREATE FUNCTION my_lower2 AS 'om.beifeng.bigdata.LowUDF' USING JAR 'hdfs://hadoop-senior01.ibeifeng.com:8020/user/beifeng/senior-hive-1.0-SNAPSHOT.jar';




show functions;



例:完成去除数据字段中双引号,自定义 UDF

原始文件



处理后的结果显示在控制台



具体代码

package om.beifeng.bigdata;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class QuotationUDF extends UDF{

/**
* 实现去除文本中的双引号
*
* @param str
* @return
*/
public Text evaluate(Text str){
// invalidate
if(null == str){
return null ;
}

if(StringUtils.isBlank(str.toString())){
return null ;
}

return new Text(str.toString().replaceAll("\"","")) ;
}

public static void main(String[] args) {

try {
Scanner in = new Scanner(new File("/opt/datas/Quotation.txt"));

while (in.hasNextLine()) {
String str = in.nextLine();
System.out.println(new QuotationUDF().evaluate(new Text(str)));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: