码迷,mamicode.com
首页 > 其他好文 > 详细

hive函数

时间:2017-09-25 23:04:45      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:body   split   end   字符串函数   自定义函数   ati   nbsp   eva   use   

内置函数

测试各种内置函数的快捷方法:

1、创建一个dual

create table dual(id string);

2、load一个文件(一行,一个空格)到dual

3、select substr(‘angelababy‘,2,3) from dual;

 Hive自定义函数和Transform

Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDFuser-defined function)。

 

自定义函数类别

 

UDF  作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)

 

UDAF(用户定义聚集函数):接收多个输入数据行,并产生一个输出数据行。(countmax

 

 

UDF开发实例

l 简单UDF示例

1、先开发一个java类,继承UDF,并重载evaluate方法

package cn.itcast.bigdata.udf
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public final class Lower extends UDF{
    public Text evaluate(final Text s){
        if(s==null){return null;}
        return new Text(s.toString().toLowerCase());
    }
}

2、打成jar包上传到服务器

3、将jar包添加到hiveclasspath

hive>add JAR /home/hadoop/udf.jar;

4、创建临时函数与开发好的java class关联

Hive>create temporary function tolowercase as ‘cn.itcast.bigdata.udf.ToProvince‘;

 

5、即可在hql中使用自定义的函数strip 

 

lJson数据解析UDF开发

 

Transform实现

 

HiveTRANSFORM 关键字提供了在SQL中调用自写脚本的功能

 

适合实现Hive中没有的功能又不想写UDF的情况

 

使用示例1下面这句sql就是借用了weekday_mapper.py对数据进行了处理.

CREATE TABLE u_data_new (
  movieid INT,
  rating INT,
  weekday INT,
  userid INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY \t;

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new
SELECT
  TRANSFORM (movieid , rate, timestring,uid)
  USING python weekday_mapper.py
  AS (movieid, rating, weekday,userid)
FROM t_rating;

其中weekday_mapper.py内容如下

#!/bin/python
import sys
import datetime

for line in sys.stdin:
  line = line.strip()
  movieid, rating, unixtime,userid = line.split(\t)
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print \t.join([movieid, rating, str(weekday),userid])

 

hive函数

标签:body   split   end   字符串函数   自定义函数   ati   nbsp   eva   use   

原文地址:http://www.cnblogs.com/duan2/p/7594263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!