All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openx.data.jsonserde.objectinspector.JsonUnionObjectInspector Maven / Gradle / Ivy

There is a newer version: 1.3.9-e.12
Show newest version
package org.openx.data.jsonserde.objectinspector;

import io.starburst.openjson.JSONArray;
import io.starburst.openjson.JSONObject;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.UnionObjectInspector;

import java.util.List;

/**
 * Created by rcongiu on 8/29/15.
 */
public class JsonUnionObjectInspector implements UnionObjectInspector {
    JsonStructOIOptions options;
    private List ois;


    public JsonUnionObjectInspector(List ois,JsonStructOIOptions opts) {
        this.ois = ois;
        options = opts;
    }


    @Override
    public List getObjectInspectors() {
        return ois;
    }


/*
 * This method looks at the object and finds which object inspector should be used.
 */
    @Override
    public byte getTag(Object o) {
        if(o==null) return 0;
        for(byte i =0; i< ois.size(); i ++) {
            ObjectInspector oi = ois.get(i);

            switch(oi.getCategory()) {
                case LIST: if(o instanceof JSONArray) return i; else break;
                case STRUCT:  if(o instanceof JSONObject) return i; else break;
                case MAP:  if(o instanceof JSONObject) return i; else break;
                case UNION: return i;

                case PRIMITIVE: {
                    PrimitiveObjectInspector poi = (PrimitiveObjectInspector) oi;
                    try {
                        // try to parse it, return if able to
                        poi.getPrimitiveJavaObject(o);
                        return i;
                    } catch (Exception ex) { continue;}
                }
                default :throw new Error("Object Inspector " + oi.toString() + " Not supported for object " + o.toString());
            }
        }
        throw new Error("No suitable Object Inspector found for object  " + o.toString() + " of class " + o.getClass().getCanonicalName());
    }

    @Override
    public Object getField(Object o) {
        return o;
    }

    @Override
    public String getTypeName() {
        return ObjectInspectorUtils.getStandardUnionTypeName(this);

    }

    @Override
    public Category getCategory() {
        return Category.UNION;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy