Spark Hive自定义函数使用解析

Posted 智能数据湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark Hive自定义函数使用解析相关的知识,希望对你有一定的参考价值。

01

简介

 

Spark Hive自定义函数使用解析

图1. CatalogFunction结构体

Spark Hive自定义函数使用解析

图2. 注册加载函数逻辑

Hive的HiveSessionCatalog是继承Spark的SessionCatalog,对Spark的基本功能做了一层装饰以适配Hive的基本功能,其中包括函数功能。HiveSimpleUDF对应UDF,HiveGenericUDF对应GenericUDF,HiveUDAFFunction对应AbstractGenericUDAFResolve以及UDAF,HiveGenericUDTF对应GenericUDTF

Spark Hive自定义函数使用解析

图3. Hive装饰spark函数逻辑

02

UDF

UDF是最常用的函数,使用起来相对比较简单,主要分为两类UDF:简单数据类型,继承UDF接口;复杂数据类型,如Map,List,Struct等数据类型,继承GenericUDF接口。

简单类型实现UDF时,可自定义若干个名字evaluate为的方法,参数和返回类型根据需要自己设置。因为UDF接口默认使用DefaultUDFMethodResolver去方法解析器获取方法,解析器是根据用户输入参数和写死的名字evaluate去反射寻找方法元数据。当然用户也可以自定义解析器解析方法。

Spark Hive自定义函数使用解析

图4. 自定义UDF简单示例

Spark Hive自定义函数使用解析


图5.默认UDF方法解析器

03

UDAF

UDAF是聚合函数,目前实现方式主要有三种:实现UDAF接口,比较老的简答实现方式,目前已经被废弃;实现UserDefinedAggregateFunction,目前使用比较普遍方式,按阶段实现接口聚集数据;实现AbstractGenericUDAFResolver,实现相对UserDefinedAggregateFunction方式稍微复杂点,还需要实现一个计算器Evaluator(如通用计算器GenericUDAFEvaluator),UDAF的逻辑处理主要发生在Evaluator。

UserDefinedAggregateFunction定义输入输出数据结构,实现初始化缓冲区(initialize),聚合单条数据(update),聚合缓存区(merge)以及计算最终结果(evaluate)。

Spark Hive自定义函数使用解析

Spark Hive自定义函数使用解析

图6.自定义UDAF简单示例

04

UDTF

UDTF简单粗暴的理解是一行生成多行的自动函数,可以生成多行多列,又被称为表生成函数。目前实现方式是实现GenericUDTF接口,实现2个接口,initialize接口参数校验,列的定义,process接口接受一行数据,切割数据。

Spark Hive自定义函数使用解析

图7.自定义UDTF简单示例


-END-

-内容精选,欢迎品鉴-


以上是关于Spark Hive自定义函数使用解析的主要内容,如果未能解决你的问题,请参考以下文章

hive自定义函数开发与部署

Spark SQL自定义函数

Spark(十八)SparkSQL的自定义函数UDF

Spark---自定义函数(UDFUDAFUDTF)

Spark学习之路 (十九)SparkSQL的自定义函数UDF

Spark学习之路 (十九)SparkSQL的自定义函数UDF[转]