SparkSQL之自定义函数UDF和UDAF

本文介绍了SparkSQL中的两种自定义函数——UDF和UDAF。当内置函数无法满足需求时,UDF用于一进一出的转换,而UDAF处理多进一出的情况。UDF的实现相对简单,只需注册和定义函数;而UDAF则较为复杂,需要继承UserDefinedAggregateFunction并重写相关方法,例如通过UDAF实现自定义平均值计算。
摘要由CSDN通过智能技术生成

SparkSQL中有两种自定函数,在我们使用自带的函数时无法满足自己的需求时,可以使用自定义函数,SparkSQL中有两种自定义函数,一种是UDF,另一种是UDAF,和Hive 很类似,但是hive中还有UDTF,一进多出,但是sparkSQL中没有,这是因为spark中用 flatMap这个函数,可以实现和udtf相同的功能
UDF函数是针对的是一进一出
UDAF针对的是多进一出

udf很简单,只需要注册一下,然后写一个函数,就可以在sql查询中使用了

    df1.createTempView("user")
    //注册
    spark.udf.register("lengthStr",(str:String)=>str.length)//自定义函数
    //直接在sql中就可以使用啦
    val df2 = spark.sql("select lengthStr(name) from user")

udaf相对来说比较复杂一点,需要继承一个 UserDefinedAggregateFunction类,在重写其中的方法,自定义函数求平均值,详细的步骤在下面的代码中

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.expressions.{
   MutableAggregationBuffer, UserDefinedAggregateFunction}
import org.apache.spark.sql.types._
import org.apache.spark.sql.{
   DataFrame, Row, SparkSession, types}

object UDAFavg {
   
  def main(args: Array[String]): Unit = {
   
    val spark 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值