Hive自定义UDTF解析Json串

网友投稿 291 2022-11-24

Hive自定义UDTF解析Json串

用于解析et事件的Json字符串 Maven依赖如下: UTF8 1.2.1 org.apache.hive hive-exec ${hive.version} maven-compiler-plugin 2.3.2 1.8 1.8 maven-assembly-plugin jar-with-dependencies make-assembly package single 具体业务代码实现: import org.apache.commons.lang.StringUtils; 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; import org.json.JSONArray; import org.json.JSONException; import java.util.ArrayList; public class EventJsonUDTF extends GenericUDTF { //该方法中,我们将指定输出参数的名称和参数类型: @Override public StructObjectInspector initialize(ObjectInspector[] argOIs) throws UDFArgumentException { ArrayList fieldNames = new ArrayList(); ArrayList fieldOIs = new ArrayList(); //fieldNames叫什么名字不重要,重要的是类型 fieldNames.add("event_name"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); fieldNames.add("event_json"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs); } //输入1条记录输出若干条结果 @Override public void process(Object[] objects) throws HiveException { // 获取传入的et String input = objects[0].toString(); // 如果传进来的数据为空,直接返回过滤掉该数据 if (StringUtils.isBlank(input)) { return; } else { try { // 获取一共有几个事件(ad/facoriters) JSONArray ja = new JSONArray(input); if (ja == null) return; // 循环遍历每一个事件 for (int i = 0; i < ja.length(); i++) { String[] result = new String[2]; try { // 取出每个的事件名称(ad/facoriters) result[0] = ja.getJSONObject(i).getString("en"); // 取出每一个事件整体 result[1] = ja.getString(i); } catch (JSONException e) { continue; } // 将结果返回 forward(result); } } catch (JSONException e) { e.printStackTrace(); } } } //当没有记录处理的时候该方法会被调用,用来清理代码或者产生额外的输出 @Override public void close() throws HiveException { } } 打jar包 上传至服务器或者hdfs add jar 创建临时\永久函数

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:今年秋季iOS 12正式版将正式推出
下一篇:HIVE中的from_unixtime函数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~