Hadoop Hive UDTF教程

本文是一个系列,第一篇打不开了,所以先翻第二篇。
在第一篇讨论了原始类型和嵌入式数据结构,但UDF限制于只有单条输出。
在本篇文章中,我们将关注UDTF,这个函数类型更加复杂,但是支持单个输入输出多行和多列的信息!(继承自org.apache.hadoop.hive.ql.udf.generic.GenericUDTF)

code

本篇文章中所有的代码和数据放在这里:
https://github.com/rathboma/hive-extension-examples
https://github.com/rathboma/hive-extension-examples

事例数据

将用到的表单命名为:people,它只有一行数据:name,每行数据中包含个人或者夫妇的名字。
它存放于文件:people.txt:

~$cat ./people.txt
John Smith
John and Ann White
Ted Green
Dorothy

我们可以将其放到Hadoop上:

hadoop fs -mkdir people
hadoop fs -put ./people.txt people

然后打开hive,创建hive表单

CREATE EXTERNAL TABLE people (name string)
ROW FORMAT DELIMITED FIELDS 
    TERMINATED BY '\t' 
    ESCAPED BY '' 
    LINES TERMINATED BY '\n'
STORED AS TEXTFILE 
LOCATION '/user/matthew/people';

UDTF的返回值

上篇所讨论的UDF和GenericUDF方法对单行数据进行操作,它们仅返回一个元素,且必须返回一个值。
这样并不能适用于所有的数据处理任务。由于Hive可以存储多种数据,有时我们并不想一个输入数据只有一行输出,也许我们希望对于每行输入能够有多行输出。例如,想想方法explode(一个 Hive 内部函数) 所能做的事。
相同的,也许我们也希望能够输出多行数据,而不是简单的返回一个值。
这些事我们都可以通过UDTF做到.

一个实际的例子

让我们假设要去创建一个表用于清洗 people的名字,
新的表单将有:
1.若干行的名字和姓(英文名的first name,Surname)。
2.不记录那些没有同时存在姓和名字的数据(有的可能由于没有空格分开,导致姓名和在一起)
3.有的是夫妇的名字,需要分开。
为了达到上述要求,我们将继承接口:

org.apache.hadoop.hive
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值