解析Json函数UDTF函数1

实现步骤:
1.将写好的代码打包上传到hdfs目录:/user/lib/
2.执行如下命令:

drop function getJsonArrSingle;
ADD JAR hdfs://nameservice1/user/lib/JsonArrSingle.jar;
ADD JAR hdfs://nameservice1/user/lib/fastjson-1.2.83.jar;
CREATE FUNCTION getJsonArrSingle AS 'com.mingyang.GetJsonArrSingleUDTF'USING JAR 'hdfs://nameservice1/user/lib/JsonArrSingle.jar',JAR 'hdfs://nameservice1/user/lib/fastjson-1.2.83.jar';
reload functions;

3.测试:
在这里插入图片描述
4. JAR包中代码如下:

package com.mingyang;

import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.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.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;

@Slf4j
public  class GetJsonArrSingleUDTF extends GenericUDTF {
   /* private IntObjectInspector intInspector;
    private DoubleObjectInspector doubleInspector;
    private BooleanObjectInspector booleanInspector;
    private TimestampObjectInspector timestampInspector;
    private DateObjectInspector dateInspector;
    private BinaryObjectInspector binaryInspector;*/
   private static final Logger logger = LoggerFactory.getLogger(GetJsonArrSingleUDTF.class);
    @Override
    public StructObjectInspector initialize(StructObjectInspector args) throws UDFArgumentException {

        ArrayList<String> fieldNames = new ArrayList<String>();
        ArrayList<ObjectInspector> fieldInspectors = new ArrayList<>();

        // Input argument inspectors
        /*StringObjectInspector stringInspector1 = (StringObjectInspector) args[0];
        StringObjectInspector stringInspector2 = (StringObjectInspector) args[1];*/
        // Output field names and inspectors
        fieldNames.add("json");
        fieldInspectors.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);

        return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldInspectors);
    }
    @Override
    public void process(Object[] args) throws HiveException {
        if(args !=null && args.length !=0 && args[0] !=null && StringUtils.isNoneEmpty(String.valueOf(args[0]))) {
            String jsonArrStr = String.valueOf(args[0]);
            JSONArray arr = JSONArray.parseArray(jsonArrStr);
            for (int i = 0; i < arr.size(); i++) {
                forward(new String[]{String.valueOf(arr.get(i))});
            }
        }else{
            forward(new String[]{null});
        }
    }



    @Override
    public void close() throws HiveException {
        // Clean up resources, if any
    }
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值