大发PK10APP下载_大发PK10APP官网 - 大发PK10APP下载,大发PK10APP官网是新浪网最重要的频道之一,24小时滚动报道国内、国际及社会新闻。每日编发新闻数以万计。

Hive内置运算函数,自定义函数(UDF)和Transform

  • 时间:
  • 浏览:1

   }

1、创建一个dual表

SELECT

      returnnew Text(s.toString().toLowerCase());

FIELDS TERMINATED BY '\t';

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

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

hive> create temporary function toLowercase as 'hiveudf.ToLowerCase';

  line = line.strip()

FROM t_rating;

ROW FORMAT DELIMITED

Time taken: 0.039 seconds

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

{"movie":"1193","rate":"5","timeStamp":"97830007300","uid":"1"}

  TRANSFORM (movieid , rate, timestring,uid)

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

#!/bin/python

  rating INT,

hive> load data local inpath'/home/tuzq/software/hivedata/dual.txt' into table dual;

{"movie":"914","rate":"3","timeStamp":"9783001968","uid":"1"}

其中dual.txt上端可是一个空格

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

内容较多,见《Hive官方文档》

OK

rate

1197

l  简单UDF示例

INSERT OVERWRITE TABLE u_data_new

内容较多,见《Hive官方文档》

hive>

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

使用示例1:下面这句sql可是借用了weekday_mapper.py对数据进行了补救.

uid

4、hive> addJAR /home/tuzq/software/hivedata/udf.jar> ;

{"movie":"661","rate":"3","timeStamp":"9783002109","uid":"1"}

import sys

  movieid, rating, unixtime,userid = line.split('\t')

for line in sys.stdin:

  AS (movieid, rating, weekday,userid)

}

注:全在hive中完成,时需用自定义函数

Time taken: 0.122 seconds, Fetched: 1 row(s)

作业:

tuzuoquan

我不管你上端用哪哪几个表,最终我我我想要得到一个结果表:

CREATE TABLE u_data_new (

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

public class ToLowerCase extends UDF {

      if(s == null) {returnnull;}

{"movie":"1197","rate":"3","timeStamp":"9783002268","uid":"1"}

hive> select toLowercase("TUZUOQUAN") from dual;

{"movie":"2355","rate":"5","timeStamp":"978824291","uid":"1"}

Added resources: [/home/tuzq/software/hivedata/udf.jar]

{"movie":"3408","rate":"4","timeStamp":"9783000275","uid":"1"}

  userid INT)

movie

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

1

  movieid INT,

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

create table dual(id string);

OK

hive>

前期准备,要把hive的lib包导入到工程中,其中UDF依赖的是hive-exec-1.2.1.jar。也可是说要把apache-hive-1.2.1-bin\lib中内容都引入到工程中。若用到hadoop中的某些api,请把hadoop的api也引入进去。

  USING 'python weekday_mapper.py'

9783002268

Added [/home/tuzq/software/hivedata/udf.jar] to class path

适合实现Hive中这样的功能又我我想要写UDF的情況

测试各种内置函数的快捷法律依据:

时需将数据导入到hive数据仓库中

有原始json数据如下:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

   public Text evaluate(final Text s) {

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

其中weekday_mapper.py内容如下

import org.apache.hadoop.io.Text;

package hiveudf;

3、将jar包上加到hive的classpath

timestamp

  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()

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

  weekday INT,

import datetime

{"movie":"1287","rate":"5","timeStamp":"9783002039","uid":"1"}

  print '\t'.join([movieid, rating, str(weekday),userid])

add FILE weekday_mapper.py;

l  Json数据解析UDF开发

3