[ https://issues.apache.org/jira/browse/HIVE-7132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14010962#comment-14010962 ]
navanee commented on HIVE-7132: ------------------------------- One More Simple Example, import java.util.ArrayList; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; /** * GenericUDTFCount2 outputs the number of rows seen, twice. It's output twice * to test outputting of rows on close with lateral view. * */ public class GenericUDTFCount2 extends GenericUDTF { Integer count = Integer.valueOf(0); Object forwardObj[] = new Object[1]; @Override public void close() throws HiveException { forwardObj[0] = count; forward(forwardObj); forward(forwardObj); } @Override public StructObjectInspector initialize(ObjectInspector[] argOIs) throws UDFArgumentException { ArrayList<String> fieldNames = new ArrayList<String>(); ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(); fieldNames.add("col1"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaIntObjectInspector); return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs); } @Override public void process(Object[] args) throws HiveException { count = Integer.valueOf(count.intValue() + 1); } > Hive 0.11.0 Custom UDTF doesnt call close method > ------------------------------------------------ > > Key: HIVE-7132 > URL: https://issues.apache.org/jira/browse/HIVE-7132 > Project: Hive > Issue Type: Bug > Components: Query Processor > Affects Versions: 0.11.0 > Environment: shark 0.9.1,hive 0.11.0 > Reporter: navanee > > In My Custom UDTF, Process method collects all row info and store them in > array list, > and in close method, i will try to forward the array list. > But some how ,my close method didnt get called while executing custom UDTF, > getting empty as result. > private PrimitiveObjectInspector[] inputOIs; // input ObjectInspectors > private List<Set<Object>> distincts = new ArrayList<Set<Object>>(); > @Override > public void process(Object[] arg0) throws HiveException { > for (int i = 0; i < arg0.length; i++) { > String value = > inputOIs[i].getPrimitiveJavaObject(arg0[i]).toString(); > distincts.get(i).add(value); > } > } > @Override > public void close() throws HiveException { > forward(new Object[]{distincts}); > } > @Override > public StructObjectInspector initialize(ObjectInspector[] arg0) throws > UDFArgumentException { > inputOIs=new PrimitiveObjectInspector[arg0.length]; > List<String> _fields = new ArrayList<String>(); > List<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(); > for (int i = 0; i < arg0.length; i++) { > inputOIs[i]=(PrimitiveObjectInspector) arg0[i]; > distincts.add(new HashSet<Object>()); > _fields.add(new Integer(i).toString()); > > fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); > } > return ObjectInspectorFactory.getStandardStructObjectInspector(_fields, > fieldOIs); > } > I tried the same code in hive 0.12, its working perfectly. But i am using > shark 0.9.1, supports only hive 0.11. > Please help me on the issue -- This message was sent by Atlassian JIRA (v6.2#6252)