函数

1.函数

UDF是在hive查询产生的相同的task进程中执行的,因此它们可以高效的执行,而且其消除了和其他系统集成时所产生的复杂度
使用UDF表示任意函数
查看函数信息

package com.hive.createDemo;

import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;

@SuppressWarnings("unused")
public class HIvetestUDF extends UDF {

	public  String evaluate(String s) {
		if (s == null)
			return null;

		SimpleDateFormat datafm1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(datafm1.toString());
		SimpleDateFormat datafm2 = new SimpleDateFormat("EEEE");
		try {
			return datafm2.format(datafm1.parse(s));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return s;
	}
}

将工程项目打包生成jar包。

 

2.函数调用

1.创建表导入数据

1	2018-23-23 01:55:433

 

hive>create table testudf(key int, value string) 
    ROW FORMAT DELIMITED 
     FIELDS TERMINATED BY '\t';
hive>load  data local inpath '/tmp/UDF.txt' overwrite into table testudf;

 

2.调用方法 

function后加的是自定方法名,提供报名+类名。

hive> add jar /home/hadoop/input/hive/hiveeclipse/UDF.jar;
Added [/home/hadoop/input/hive/hiveeclipse/UDF.jar] to class path
Added resources: [/home/hadoop/input/hive/hiveeclipse/UDF.jar]
hive> create temporary function HIvetestUDF as 'com.hive.createDemo.HIvetestUDF';
OK
Time taken: 0.161 seconds
hive> select * from testudf;
OK
1	2018-23-23 01:55:433
Time taken: 1.736 seconds, Fetched: 1 row(s)
hive> select key,HIvetestUDF(value) from testudf;
OK
java.text.SimpleDateFormat@4f76f1a0
1	星期六
Time taken: 0.48 seconds, Fetched: 1 row(s)
hive> 

 

 

 

 

转载于:https://my.oschina.net/u/3746673/blog/1798936

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值