Hive自定义函数UDF&&transform

首先将hive lib中的jar包放到类路径下面

extends udf

evaluate 方法可以有多个,为重载,根据传入参数值的类型加以区分

导出jar包 idea导出很麻烦,果断换eclipse

hive下 add JAR xxx.jar;

hive> create temporary function functionName as 'jar包所在的类名';

select num xx(num) from p;

处理json格式文件

 ObjectMapper om = new ObjectMapper();

         try {
             MovierateBean  bean = om.readValue(jsonline,MovierateBean. class );
             return bean.toString();
         } catch (Exception e){
             return (jsonline);
         }  


扫描二维码关注公众号,回复: 134218 查看本文章

Hive的UDF、UDAF需要通过java语言编写。Hive提供了另一种方式,达到自定义UDF和UDAF的目的,但使用方法更简单。这就是TRANSFORM。TRANSFORM语言支持通过多种语言,实现类似于UDF的功能。

Hive还提供了MAP和REDUCE这两个关键字。但MAP和REDUCE一般可理解为只是TRANSFORM的别名。并不代表一般是在map阶段或者是在reduce阶段调用。详见官网说明。

我们可以使用如下的python脚本代替上面的UDF函数:

服务器端/opt/movie_trans.py脚本内容如下:

import sys
import datetime
import json
 
for line in sys.stdin:
     #line='{"movie":"2797","rate":"4","timeStamp":"978302039","uid":"1"}'
     line = line.strip()
     hjson = json.loads(line)
     movie = hjson[ 'movie' ]
     rate = hjson[ 'rate' ]
     timeStamp = hjson[ 'timeStamp' ]
     uid = hjson[ 'uid' ]
     timeStamp = datetime.datetime.fromtimestamp( float (timeStamp))
     print '\t' .join([movie, rate, str (timeStamp),uid])

在hive中执行如下脚本:

ADD FILE / opt / movie_trans.py;
 
SELECT
   TRANSFORM (rate)
   USING 'python movie_trans.py'
   AS (movie,rate, timeStamp, uid)
FROM rating;

猜你喜欢

转载自blog.csdn.net/qq_38250124/article/details/80104756