Github user setjet commented on a diff in the pull request:

    https://github.com/apache/spark/pull/18113#discussion_r150392495
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/aggregate/typedaggregators.scala
 ---
    @@ -76,26 +76,126 @@ class TypedCount[IN](val f: IN => Any) extends 
Aggregator[IN, Long, Long] {
     
       // Java api support
       def this(f: MapFunction[IN, Object]) = this((x: IN) => 
f.call(x).asInstanceOf[Any])
    +  
       def toColumnJava: TypedColumn[IN, java.lang.Long] = {
         toColumn.asInstanceOf[TypedColumn[IN, java.lang.Long]]
       }
     }
     
    +class TypedAverage[IN](val f: IN => Double)
    +  extends Aggregator[IN, (Double, Long), Double] {
     
    -class TypedAverage[IN](val f: IN => Double) extends Aggregator[IN, 
(Double, Long), Double] {
       override def zero: (Double, Long) = (0.0, 0L)
       override def reduce(b: (Double, Long), a: IN): (Double, Long) = (f(a) + 
b._1, 1 + b._2)
    -  override def finish(reduction: (Double, Long)): Double = reduction._1 / 
reduction._2
    --- End diff --
    
    Order of functions is consistent among all aggregation functions: zero, 
reduce, merge finish.  Hence the swap of location of the merge and finish 
functions


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to