Spark 自定义函数UDF UDAF
步骤:自定义函数,再注册
用户自定义函数在sparksql中可以分为两类,
– udf :用户自定义函数, 通常指的是一对一形式,进入一条记录,出来一条记录
– udaf 用户自定义聚合函数, 通常指的是多对一形式,进入多条记录,出来一条记录,比如模拟max
案例演示
UDF
package com.qf.sql.day03
import org.apache.spark.sql.{DataFrame, SparkSession}
object _05TestUDF1 {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().master("local[*]").appName("udf").getOrCreate()
import spark.implicits._
val df: DataFrame = spark.read.json("sql/emp.json")
df.createTempView("emp")
//spark.sql("select empno,ename,job,sal,deptno from emp ").show
//使用内置函数,查询姓名长度大于4的员工信息
//spark.sql("select empno,ename,job,sal,deptno from emp where length(ename)>4").show
//定义一个方法
def func1(word:String)={
word.length
}
//注册函数, func1 _ 将方法转成函数
//spark.udf.register("mylength", func1 _)
//匿名函数的写法
spark.udf.register("mylength",{word:String=>word.length})
spark.sql("select empno,ename,mylength(ename) as lg,job,sal,deptno from emp where mylength(ename)>