Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22766#discussion_r226511506
  
    --- Diff: sql/hive/src/main/scala/org/apache/spark/sql/hive/hiveUDFs.scala 
---
    @@ -340,39 +340,39 @@ private[hive] case class HiveUDAFFunction(
         resolver.getEvaluator(parameterInfo)
       }
     
    -  // The UDAF evaluator used to consume raw input rows and produce partial 
aggregation results.
    -  @transient
    -  private lazy val partial1ModeEvaluator = newEvaluator()
    +  private case class PartialEvaluator(
    +    evaluator: GenericUDAFEvaluator,
    +    objectInspector: ObjectInspector)
     
    +  // The UDAF evaluator used to consume raw input rows and produce partial 
aggregation results.
       // Hive `ObjectInspector` used to inspect partial aggregation results.
       @transient
    -  private val partialResultInspector = partial1ModeEvaluator.init(
    -    GenericUDAFEvaluator.Mode.PARTIAL1,
    -    inputInspectors
    -  )
    +  private lazy val partial1Mode = {
    +    val evaluator = newEvaluator()
    +    PartialEvaluator(evaluator, 
evaluator.init(GenericUDAFEvaluator.Mode.PARTIAL1, inputInspectors))
    +  }
     
       // The UDAF evaluator used to merge partial aggregation results.
       @transient
       private lazy val partial2ModeEvaluator = {
         val evaluator = newEvaluator()
    -    evaluator.init(GenericUDAFEvaluator.Mode.PARTIAL2, 
Array(partialResultInspector))
    +    evaluator.init(GenericUDAFEvaluator.Mode.PARTIAL2, 
Array(partial1Mode.objectInspector))
         evaluator
       }
     
       // Spark SQL data type of partial aggregation results
       @transient
    -  private lazy val partialResultDataType = 
inspectorToDataType(partialResultInspector)
    +  private lazy val partialResultDataType = 
inspectorToDataType(partial1Mode.objectInspector)
     
       // The UDAF evaluator used to compute the final result from a partial 
aggregation result objects.
    -  @transient
    -  private lazy val finalModeEvaluator = newEvaluator()
    -
       // Hive `ObjectInspector` used to inspect the final aggregation result 
object.
       @transient
    -  private val returnInspector = finalModeEvaluator.init(
    -    GenericUDAFEvaluator.Mode.FINAL,
    -    Array(partialResultInspector)
    -  )
    +  private lazy val finalMode = {
    --- End diff --
    
    ditto


---

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

Reply via email to