Spark SQL 2.X 自定义udf

一、UDF介绍UDF(User Define Function),即用户自定义函数。几乎所有sql数据库的实现都为用户提供了扩展接口来增强sql语句的处理能力,这些扩展称之为UDXXX,即用户定义(User Define)的XXX,这个XXX可以是对单行操作的UDF,或者是对多行操作的UDAF,或者是UDTF,本次主要介绍UDF。UDF的UD表示用户定义,既然有用户定义,就会有系统内建(...
摘要由CSDN通过智能技术生成

一、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。

1、创建测试用DataFrame

下面以Spark2.x为例给出代码,关于Spark1.x创建DataFrame可在最后的完整代码里查看。

// 构造测试数据,有两个字段、名字和年龄
val userData = Array(("Leo", 16), ("Marry", 21), ("Jack", 14), ("Tom", 18))

//创建测试df
val userDF = spark.createDataFrame(userData).toDF("name", "age")
userDF.show
// 注册一张user表
userDF.createOrReplaceTempView("user")

结果为:

+-----+---+
| name|age|
+-----+---+
|  Leo| 16|
|Marry| 21|
| Jack| 14|
|  Tom| 18|
+-----+---+

2、Spark Sql用法

2.1 通过匿名函数注册UDF

下面的UDF的功能是计算某列的长度,该列的类型为String

2.1.1 注册
Spark2.x:

spark.udf.register("strLen", (str: String) => str.length())

Spark1.x:

sqlContext.udf.register("strLen", (str: String) => str.length())

2.2.2 使用

仅以Spark2.x为例

spark.sql("select name,strLen(name) as name_len from user").show
+-----+--------+
| name|name_len|
+-----+--------+
|  Leo|       3|
|Marry|       5|
| Jack|       4|
|  Tom|       3|
+-----+--------+

2.2 通过实名函数注册UDF

实名函数的注册有

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值