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: [email protected]
For additional commands, e-mail: [email protected]