UDF
输入一行,返回一个结果。在Shell窗口中可以通过spark.udf功能用户可以自定义函数。
UDAF(弱)
输入多行,返回一行。强类型的Dataset和弱类型的DataFrame都提供了相关的聚合函数, 如 count(),countDistinct(),avg(),max(),min()。除此之外,用户可以设定自己的自定义聚合函数。通过继承UserDefinedAggregateFunction来实现用户自定义聚合函数。
package com.atguigu.sparkSQL
import org.apache.spark.SparkContext
import org.apache.spark.sql.expressions.{
MutableAggregationBuffer, UserDefinedAggregateFunction}
import org.apache.spark.sql.types.{
DataType, DoubleType, LongType, StructField, StructType}
import org.apache.spark.sql.{
DataFrame, Row, SparkSession}
object UDAFTest {
def main(args: Array[String]): Unit = {
// 1. 创建SparkSession对象
val spark: SparkSession = SparkSession.builder()
.master("local[*]")
.appName("SparkSQL")
.getOrCreate()
val context: SparkContext = spark.sparkContext
// 2. 导入隐式转换 : spark为创建得SparkSession对象
// 3. 读取数据创建DF
val df: DataFrame = spark.read.json("D:\\MyWork\\WorkSpaceIDEA\\scalaDemo\\sparksql\\src\\main\\resources\\people.json")
// 4. 创建UDAF函数
spark.udf.register("myAvg",new MyAvg)
// 5. 使用UDAF函数
df.createTempView("people")
spark.