一、UDF介绍
UDF(User Define Function),即用户自定义函数。
几乎所有sql数据库的实现都为用户提供了扩展接口来增强sql语句的处理能力,这些扩展称之为UDXXX,即用户定义(User Define)的XXX,这个XXX可以是对单行操作的UDF,或者是对多行操作的UDAF,或者是UDTF,本次主要介绍UDF。
UDF的UD表示用户定义,既然有用户定义,就会有系统内建(built-in),一些系统内建的函数比如abs,接受一个数字返回它的绝对值,比如substr对字符串进行截取,它们的特点就是在执行sql语句的时候对每行记录调用一次,每调用一次传入一些参数,这些参数通常是表的某一列或者某几列在当前行的值,然后产生一个输出作为结果。
适用场景:UDF使用频率极高,对于单条记录进行比较复杂的操作,使用内置函数无法完成或者比较复杂的情况都比较适合使用UDF。
二、创建测试用DataFrame
下面以Spark2.x为例给出代码,关于Spark1.x创建DataFrame可在最后的完整代码里查看。
![8b100332651f4551850a9b4a991dca5d.png](https://i-blog.csdnimg.cn/blog_migrate/6118c795308e4829dec6b8fb8d024777.jpeg)
结果为
![b680b3f39201f4b07be2a7d03d6f9c83.png](https://i-blog.csdnimg.cn/blog_migrate/f4035d1c5b08103c7b4054dd61360380.jpeg)
三、Spark Sql用法
3.1 通过匿名函数注册UDF
下面的UDF的功能是计算某列的长度,该列的类型为String
3.1.1 注册
Spark2.x:
spark.udf.register("strLen