package cn.com.dtmobile.hiveUdf; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.udf.generic.GenericUDF; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; /** * 调整小区的格式 * 460-00-394487-1 --> 394487_1 */ public class SubstrCgi extends GenericUDF { private transient StringObjectInspector allCgi; @Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { ObjectInspector a = arguments[0]; if (arguments.length != 1) { throw new UDFArgumentLengthException( "The operator 'SubstrCgi' accepts one arguments."); } this.allCgi = (StringObjectInspector) a; return PrimitiveObjectInspectorFactory.javaStringObjectInspector; } @Override public Object evaluate(DeferredObject[] arguments) throws HiveException { String cgi = allCgi.getPrimitiveJavaObject(arguments[0].get()); if(null == cgi) { return null; } String[] s = cgi.toString().split("-"); StringBuffer sb = new StringBuffer().append(s[2]).append("_").append(s[3]); return sb.toString(); } @Override public String getDisplayString(String[] children) { return "Usage: SubstrCgi(String cgi)"; } // public static void main(String[] args) throws Exception { // SubstrCgi sub = new SubstrCgi(); // ObjectInspector stringOI = PrimitiveObjectInspectorFactory.javaStringObjectInspector; // sub.initialize(new ObjectInspector[]{stringOI}); // String input1 = "460-00-394487-1"; // String input = "460-00-396666-2"; // // Object result = sub.evaluate(new DeferredObject[]{new DeferredJavaObject(input)}); // System.out.println(result.toString()); // sub.close(); // } }