-UDAF 用户自定义聚合函数
测试数据 复制粘贴即可使用
partition 01 (a,b,c,d,a,b,c,d)
partition 02 (b,b,c,c,d,d,g,g)
**实现的方法**
01.初始化方法
override def initialize(buffer: MutableAggregationBuffer): Unit =
{
buffer(0)=0;
}
(在map 和 reduce 端每个RDD分区内,按照group by的字段 会创建三个初始化值 )
1.map端
partition 01 (a,0) (b,0) (c,0) (d,0) 分为四组
partition 02 (b,0) (c,0) (d,0) (g,0)
2.reduce端
会为每个group by的字段做一个初始化值 相同的字段只会做一次
(a,0) (b,0) (c,0) (d,0) (g,0)
02. updata方法
override def update(buffer: MutableAggregationBuffer, input: Row): Unit =
{
buffer(0)=buffer.getAs[Int](0)+1;
}
(在map端 作用在每个分区内的每个小组上 通过面逻辑 得到结果 )
partition 01 (a,2) (b,2) (c,2) (d,2)
partition 02 (b,2) (c,2) (d,2) (g,2)
02 merge合并方法
override def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit =
{
buffer1(0)=buffer1.getAs[Int](0)+buffer2.getAs[Int](0)
}
partition 01 (a,2) (b,2) (c,2) (d,2)
partition 02 (b,2) (c,2) (d,2) (g,2)