2 Star 16 Fork 17

Appleyuchi/Flink_Code

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
helloGenericUDFNew.java 3.69 KB
一键复制 编辑 原始数据 按行查看 历史
阿啄debugIT 提交于 2021-05-25 15:15 +08:00 . 调试代码
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();
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/appleyuchi/Flink_Code.git
git@gitee.com:appleyuchi/Flink_Code.git
appleyuchi
Flink_Code
Flink_Code
master

搜索帮助