Sun Rui created HIVE-6922:
-----------------------------

             Summary: NullPointerException in collect_set() UDAF
                 Key: HIVE-6922
                 URL: https://issues.apache.org/jira/browse/HIVE-6922
             Project: Hive
          Issue Type: Bug
          Components: UDF
            Reporter: Sun Rui
            Assignee: Sun Rui


Steps to reproduce the bug:
{noformat}
create table temp(key int, value string);
-- leave the table empty
select collect_set(key) from temp where key=0;

Error: java.lang.RuntimeException: Hive Runtime Error while closing operators: 
java.lang.NullPointerException
        at 
org.apache.hadoop.hive.ql.exec.mr.ExecReducer.close(ExecReducer.java:326)
        at 
org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:471)
        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1477)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: 
java.lang.NullPointerException
        at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.closeOp(GroupByOperator.java:1141)
        at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:577)
        at 
org.apache.hadoop.hive.ql.exec.mr.ExecReducer.close(ExecReducer.java:318)
        ... 7 more
Caused by: java.lang.NullPointerException
        at 
org.apache.hadoop.hive.ql.udf.generic.GenericUDAFMkCollectionEvaluator.merge(GenericUDAFMkCollectionEvaluator.java:140)
        at 
org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.aggregate(GenericUDAFEvaluator.java:186)
        at 
org.apache.hadoop.hive.ql.exec.GroupByOperator.closeOp(GroupByOperator.java:1132)
        ... 9 more
{noformat}

The root cause is that in GenericUDAFMkCollectionEvaluator.merge() 
partialResult could be null but is not validated before it is used.
{code}
    List<Object> partialResult = (ArrayList<Object>) 
internalMergeOI.getList(partial);
    for(Object i : partialResult) {
      putIntoCollection(i, myagg);
    }
{code}




--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to