UDAF用户自定义聚合函数

-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) 

猜你喜欢

转载自blog.csdn.net/qq_42890382/article/details/104311908