You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by Amit Dutta <am...@outlook.com> on 2015/09/02 07:48:04 UTC
Date parsing Exception at Hadoop server
Hi Gurus,
I am facing ParseException for the following code for my UDF in hive. just the evaluate method.
private final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy", Locale.US);
public Object evaluate(DeferredObject[] arguments) throws HiveException {
String result = "0";
assert (arguments.length == 1);
List<Text> list = (List<Text>) this.listOI.getList(arguments[0].get());
if (list == null) {
return null;
}
System.out.println("--------------------- Size ----------------:"+ list.get(0));
if (list.size() > 0) {
List<Date> listDates = new ArrayList<Date>();
// result = compareDates(list);
for (Text dateTxt : list) {
try {
dateTxt.toString());
String dt = new String(dateTxt.toString().trim());
Date transDate = sdf.parse(dt);
listDates.add(transDate);
listDates.size());
} catch (ParseException e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
if (listDates.size() > 0) {
Date resultDate = Collections.min(listDates);
result = sdf.format(resultDate);
}
}
return result;
}
The same code is passing the test perfectly. Following is the test method.
public void testGetMinDate() throws HiveException {
// set up the models we need
GetMinDate example = new GetMinDate();
ObjectInspector stringOI = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
ObjectInspector listOI = ObjectInspectorFactory.getStandardListObjectInspector(stringOI);
StringObjectInspector resultInspector = (StringObjectInspector) example.initialize(new ObjectInspector[]{listOI});
// create the actual UDF arguments
List<Text> list = new ArrayList<Text>();
list.add(new Text("01-01-2015"));
list.add(new Text("01-03-2014"));
list.add(new Text("04-01-2015"));
// test our results
// the value exists
Object result = example.evaluate(new DeferredObject[]{new DeferredJavaObject(list)});
System.out.println(result);
Assert.assertEquals("01-03-2014", result);
// the value doesn't exist
// Object result2 = example.evaluate(new DeferredObject[]{new DeferredJavaObject(list)});
// Assert.assertEquals("Success", result2);
// arguments are null
Object result3 = example.evaluate(new DeferredObject[]{new DeferredJavaObject(null)});
Assert.assertNull(result3);
}
Following is the error
java.text.ParseException: Unparseable date: "23-05-2015"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.vzw.mct.GetMinDate.evaluate(GetMinDate.java:44)
at org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:166)
at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:77)
at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:65)
at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:79)
at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:793)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.forward(GroupByOperator.java:1064)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processAggr(GroupByOperator.java:875)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processKey(GroupByOperator.java:737)
at org.apache.hadoop.hive.ql.exec.GroupByOperator.processOp(GroupByOperator.java:803)
at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:262)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:444)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1594)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Not sure why it is failing in the server. If any one kindly point it out it will be great.
Thanks,
Amit