diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/generic/NumericHistogram.java ql/src/java/org/apache/hadoop/hive/ql/udf/generic/NumericHistogram.java index a8c875c..a73ee68 100644 --- ql/src/java/org/apache/hadoop/hive/ql/udf/generic/NumericHistogram.java +++ ql/src/java/org/apache/hadoop/hive/ql/udf/generic/NumericHistogram.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.Arrays; import java.util.Collections; import java.util.Random; import org.apache.hadoop.hive.serde2.io.DoubleWritable; @@ -42,14 +41,7 @@ double y; public int compareTo(Object other) { - Coord o = (Coord) other; - if(x < o.x) { - return -1; - } - if(x > o.x) { - return 1; - } - return 0; + return Double.compare(x, ((Coord) other).x); } }; diff --git ql/src/test/queries/clientpositive/udaf_percentile_approx_23.q ql/src/test/queries/clientpositive/udaf_percentile_approx_23.q index 1efa295..fa1dd6e 100644 --- ql/src/test/queries/clientpositive/udaf_percentile_approx_23.q +++ ql/src/test/queries/clientpositive/udaf_percentile_approx_23.q @@ -84,3 +84,10 @@ select * from t9; select * from t10; select * from t11; select * from t12; + +set hive.cbo.enable=false; + +-- NaN +explain +select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket; +select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket; diff --git ql/src/test/results/clientpositive/udaf_percentile_approx_23.q.out ql/src/test/results/clientpositive/udaf_percentile_approx_23.q.out index b2c0281..32ae74b 100644 --- ql/src/test/results/clientpositive/udaf_percentile_approx_23.q.out +++ ql/src/test/results/clientpositive/udaf_percentile_approx_23.q.out @@ -504,3 +504,68 @@ POSTHOOK: type: QUERY POSTHOOK: Input: default@t12 #### A masked pattern was here #### [26.0,255.5,479.0,491.0] +PREHOOK: query: -- NaN +explain +select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket +PREHOOK: type: QUERY +POSTHOOK: query: -- NaN +explain +select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: bucket + Statistics: Num rows: 726 Data size: 5812 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: key (type: double) + outputColumnNames: key + Statistics: Num rows: 726 Data size: 5812 Basic stats: COMPLETE Column stats: NONE + Group By Operator + aggregations: percentile_approx(CASE WHEN ((key < 100.0)) THEN (UDFToDouble('NaN')) ELSE (key) END, 0.5) + mode: hash + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE + Reduce Output Operator + sort order: + Statistics: Num rows: 1 Data size: 0 Basic stats: PARTIAL Column stats: NONE + value expressions: _col0 (type: array) + Reduce Operator Tree: + Group By Operator + aggregations: percentile_approx(VALUE._col0) + mode: mergepartial + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: _col0 (type: double) + outputColumnNames: _col0 + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket +PREHOOK: type: QUERY +PREHOOK: Input: default@bucket +#### A masked pattern was here #### +POSTHOOK: query: select percentile_approx(case when key < 100 then cast('NaN' as double) else key end, 0.5) from bucket +POSTHOOK: type: QUERY +POSTHOOK: Input: default@bucket +#### A masked pattern was here #### +341.5