代码拉取完成,页面将自动刷新
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.serde2.lazy.LazyString;
import org.apache.hadoop.hive.serde2.lazy.LazyMap;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.MapObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StructField;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
import java.util.ArrayList;
public class helloGenericUDFNew extends GenericUDF {
////输入变量定义
private ObjectInspector nameObj;
private ListObjectInspector listoi;
private MapObjectInspector mapOI;
private ArrayList<Object> valueList = new ArrayList<Object>();
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
nameObj = (ObjectInspector)arguments[0];
listoi = (ListObjectInspector)arguments[1];
mapOI = ((MapObjectInspector)listoi.getListElementObjectInspector());
//输出结构体定义
ArrayList structFieldNames = new ArrayList();
ArrayList structFieldObjectInspectors = new ArrayList();
structFieldNames.add("name");
structFieldNames.add("totalScore");
structFieldObjectInspectors.add( PrimitiveObjectInspectorFactory.writableStringObjectInspector );
structFieldObjectInspectors.add( PrimitiveObjectInspectorFactory.writableIntObjectInspector );
StructObjectInspector si2;
si2 = ObjectInspectorFactory.getStandardStructObjectInspector(structFieldNames, structFieldObjectInspectors);
return si2;
}
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException{
LazyString LName = (LazyString)(arguments[0].get());
String strName = ((StringObjectInspector)nameObj).getPrimitiveJavaObject( LName );
int nelements = listoi.getListLength(arguments[1].get());
int nTotalScore=0;
valueList.clear();
//遍历list
for(int i=0;i<nelements;i++)
{
LazyMap LMap = (LazyMap)listoi.getListElement(arguments[1].get(),i);
//获取map中的所有value值
valueList.addAll(mapOI.getMap(LMap).values());
for (int j = 0; j < valueList.size(); j++)
{
nTotalScore+=Integer.parseInt(valueList.get(j).toString());
}
}
Object[] e;
e = new Object[2];
e[0] = new Text(strName);
e[1] = new IntWritable(nTotalScore);
return e;
}
@Override
public String getDisplayString(String[] children) {
assert( children.length>0 );
StringBuilder sb = new StringBuilder();
sb.append("helloGenericUDFNew(");
sb.append(children[0]);
sb.append(")");
return sb.toString();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。