spark自定义聚合函数需要继承一个抽象类UserDefinedAggregateFunction,并重写以下属性和方法
1. inputSchema:函数的参数列表,不过需要写成StructType的格式,例如:
override def inputSchema:StructType = StructType(Array(StructField("age",IntegerType)))
一个参数就是一个StructField,"age"代表参数名;IntegerType是参数类型,也就是int类型,但不能写scala的Int,必须是sparksql的数据类型,具体支持哪些类型,可见org.apache.spark.sql.types包下的类,
2.bufferSchema:中间结果的类型,比如求和时,a、b、c相加,需要先计算a+b并保存结果ab,然后计算ab+c,这个ab就是中间结果。如果是求平均数,存储总和以及计数,总和及计数就是中间结果,例子如下和1类似,不再赘述。
override def bufferSchema:StructType = StructType(Array(StructField("count",IntegerType),
S