Spark(Hive) SQL中UDF的使用
相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内置的各类UDF也为我们的数据处理提供了不少便利的工具,当这些内置的UDF不能满足于我们的需要时,Hive SQL或Spark SQL还为我们提供了自定义UDF的相关接口,方便我们根据自己的需求进行扩展。
在Hive的世界里使用自定义UDF的过程是比较复杂的。我们需要根据需求使用Java语言开发相应的UDF(UDAF、UDTF),然后将UDF的代码及其依赖编译打包为Jar,使用方法有两种:
(1)临时函数
在一次会话(Session)中使用如下语句创建临时函数:
add jar /usr/local/fqlhadoop/spark/lib/hive_udf.jar
create temporary function row_sequence as 'org.rowsequence.RowSequence';
select id,row_sequence() from test.test limit 2;
这种方式有一个缺点:每一次会话过程中使用函数时都需要创建,而且仅在当前会话中有效。
(2)永久函数
这个特性需要高版本的Hive支持,它的好处是可以将UDF Jar存放至HDFS,函数仅需要创建一次即可以永久使用,如下:
(需要将hive_udf.jar(每台spark服务器