Repository: hive Updated Branches: refs/heads/master f8b02610d -> ab03dc97b
HIVE-11502: Map side aggregation is extremely slow (Yongzhi Chen, reviewed by Chao Sun) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ab03dc97 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ab03dc97 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ab03dc97 Branch: refs/heads/master Commit: ab03dc97b53ac6138de1be68fcb2f8b15aef400f Parents: f8b0261 Author: Yongzhi Chen <yongzhi_c...@hotmail.com> Authored: Wed Aug 19 18:21:54 2015 -0700 Committer: Chao Sun <sunc...@apache.org> Committed: Wed Aug 19 18:21:54 2015 -0700 ---------------------------------------------------------------------- .../hadoop/hive/ql/exec/KeyWrapperFactory.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/ab03dc97/ql/src/java/org/apache/hadoop/hive/ql/exec/KeyWrapperFactory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/KeyWrapperFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/KeyWrapperFactory.java index bf4ba7f..22bd951 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/KeyWrapperFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/KeyWrapperFactory.java @@ -21,6 +21,7 @@ package org.apache.hadoop.hive.ql.exec; import java.util.Arrays; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.serde2.lazy.LazyDouble; import org.apache.hadoop.hive.serde2.objectinspector.ListObjectsEqualComparer; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; @@ -103,7 +104,22 @@ public class KeyWrapperFactory { @Override public void setHashKey() { - hashcode = Arrays.hashCode(keys); + if (keys == null) { + hashcode = 0; + } else { + hashcode = 1; + for (Object element : keys) { + hashcode = 31 * hashcode; + if(element != null) { + if(element instanceof LazyDouble) { + long v = Double.doubleToLongBits(((LazyDouble)element).getWritableObject().get()); + hashcode = hashcode + (int) (v ^ (v >>> 32)); + } else { + hashcode = hashcode + element.hashCode(); + } + } + } + } } @Override