56 Hive自定义函数和Transform

简介: 56 Hive自定义函数和Transform

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

自定义函数类别

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

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

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包添加到hive的classpath

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

Hive>create temporary function toprovince as 'cn.itcast.bigdata.udf.ToProvince';

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

Select strip(name),age from t_test;
Transform实现

Hive的 TRANSFORM 关键字提供了在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, rating, unixtime,userid)
  USING 'python weekday_mapper.py'
  AS (movieid, rating, weekday,userid)
FROM u_data;

其中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])

使用示例2:下面的例子则是使用了shell的cat命令来处理数据

FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';


目录
相关文章
|
6月前
|
SQL 存储 Java
Hive【Hive(八)自定义函数】
Hive【Hive(八)自定义函数】
|
6月前
|
SQL 存储 Java
Hive UDF UDTF UDAF 自定义函数详解
Hive UDF UDTF UDAF 自定义函数详解
113 2
Hive UDF UDTF UDAF 自定义函数详解
|
2月前
|
SQL JavaScript 前端开发
Hive根据用户自定义函数、reflect函数和窗口分析函数
Hive根据用户自定义函数、reflect函数和窗口分析函数
32 6
|
6月前
|
SQL 分布式计算 Java
Hive自定义函数UDF编写
Hive自定义函数UDF编写
81 2
|
SQL JSON Oracle
Hive自定义函数与transform的使用
Hive自定义函数与transform的使用
119 0
|
SQL Java 数据挖掘
【Hive】(十二)Hive自定义函数详解(UDF、UDAF、UDTF)
【Hive】(十二)Hive自定义函数详解(UDF、UDAF、UDTF)
1014 0
|
SQL Java Maven
Hive----自定义函数
自定义函数
129 0
|
SQL Ubuntu Java
Hive自定义函数
关于Hive的自定义函数
|
6月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
185 1
|
29天前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
30 0