Example usage for org.apache.hadoop.io BytesWritable getBytes

List of usage examples for org.apache.hadoop.io BytesWritable getBytes

Introduction

In this page you can find the example usage for org.apache.hadoop.io BytesWritable getBytes.

Prototype

@Override
public byte[] getBytes() 

Source Link

Document

Get the data backing the BytesWritable.

Usage

From source file:com.ebay.nest.io.sede.binarysortable.BinarySortableSerDe.java

License:Apache License

static void serialize(OutputByteBuffer buffer, Object o, ObjectInspector oi, boolean invert)
        throws SerDeException {
    // Is this field a null?
    if (o == null) {
        buffer.write((byte) 0, invert);
        return;//from  ww  w.  j  a  v a  2  s.c  o m
    }
    // This field is not a null.
    buffer.write((byte) 1, invert);

    switch (oi.getCategory()) {
    case PRIMITIVE: {
        PrimitiveObjectInspector poi = (PrimitiveObjectInspector) oi;
        switch (poi.getPrimitiveCategory()) {
        case VOID: {
            return;
        }
        case BOOLEAN: {
            boolean v = ((BooleanObjectInspector) poi).get(o);
            buffer.write((byte) (v ? 2 : 1), invert);
            return;
        }
        case BYTE: {
            ByteObjectInspector boi = (ByteObjectInspector) poi;
            byte v = boi.get(o);
            buffer.write((byte) (v ^ 0x80), invert);
            return;
        }
        case SHORT: {
            ShortObjectInspector spoi = (ShortObjectInspector) poi;
            short v = spoi.get(o);
            buffer.write((byte) ((v >> 8) ^ 0x80), invert);
            buffer.write((byte) v, invert);
            return;
        }
        case INT: {
            IntObjectInspector ioi = (IntObjectInspector) poi;
            int v = ioi.get(o);
            serializeInt(buffer, v, invert);
            return;
        }
        case LONG: {
            LongObjectInspector loi = (LongObjectInspector) poi;
            long v = loi.get(o);
            buffer.write((byte) ((v >> 56) ^ 0x80), invert);
            buffer.write((byte) (v >> 48), invert);
            buffer.write((byte) (v >> 40), invert);
            buffer.write((byte) (v >> 32), invert);
            buffer.write((byte) (v >> 24), invert);
            buffer.write((byte) (v >> 16), invert);
            buffer.write((byte) (v >> 8), invert);
            buffer.write((byte) v, invert);
            return;
        }
        case FLOAT: {
            FloatObjectInspector foi = (FloatObjectInspector) poi;
            int v = Float.floatToIntBits(foi.get(o));
            if ((v & (1 << 31)) != 0) {
                // negative number, flip all bits
                v = ~v;
            } else {
                // positive number, flip the first bit
                v = v ^ (1 << 31);
            }
            buffer.write((byte) (v >> 24), invert);
            buffer.write((byte) (v >> 16), invert);
            buffer.write((byte) (v >> 8), invert);
            buffer.write((byte) v, invert);
            return;
        }
        case DOUBLE: {
            DoubleObjectInspector doi = (DoubleObjectInspector) poi;
            long v = Double.doubleToLongBits(doi.get(o));
            if ((v & (1L << 63)) != 0) {
                // negative number, flip all bits
                v = ~v;
            } else {
                // positive number, flip the first bit
                v = v ^ (1L << 63);
            }
            buffer.write((byte) (v >> 56), invert);
            buffer.write((byte) (v >> 48), invert);
            buffer.write((byte) (v >> 40), invert);
            buffer.write((byte) (v >> 32), invert);
            buffer.write((byte) (v >> 24), invert);
            buffer.write((byte) (v >> 16), invert);
            buffer.write((byte) (v >> 8), invert);
            buffer.write((byte) v, invert);
            return;
        }
        case STRING: {
            StringObjectInspector soi = (StringObjectInspector) poi;
            Text t = soi.getPrimitiveWritableObject(o);
            serializeBytes(buffer, t.getBytes(), t.getLength(), invert);
            return;
        }

        case VARCHAR: {
            HiveVarcharObjectInspector hcoi = (HiveVarcharObjectInspector) poi;
            HiveVarcharWritable hc = hcoi.getPrimitiveWritableObject(o);
            // use varchar's text field directly
            Text t = hc.getTextValue();
            serializeBytes(buffer, t.getBytes(), t.getLength(), invert);
            return;
        }

        case BINARY: {
            BinaryObjectInspector baoi = (BinaryObjectInspector) poi;
            BytesWritable ba = baoi.getPrimitiveWritableObject(o);
            byte[] toSer = new byte[ba.getLength()];
            System.arraycopy(ba.getBytes(), 0, toSer, 0, ba.getLength());
            serializeBytes(buffer, toSer, ba.getLength(), invert);
            return;
        }
        case DATE: {
            DateObjectInspector doi = (DateObjectInspector) poi;
            int v = doi.getPrimitiveWritableObject(o).getDays();
            serializeInt(buffer, v, invert);
            return;
        }
        case TIMESTAMP: {
            TimestampObjectInspector toi = (TimestampObjectInspector) poi;
            TimestampWritable t = toi.getPrimitiveWritableObject(o);
            byte[] data = t.getBinarySortable();
            for (int i = 0; i < data.length; i++) {
                buffer.write(data[i], invert);
            }
            return;
        }
        case DECIMAL: {
            // decimals are encoded in three pieces:
            // sign: 1, 2 or 3 for smaller, equal or larger than 0 respectively
            // factor: Number that indicates the amount of digits you have to move
            // the decimal point left or right until the resulting number is smaller
            // than zero but has something other than 0 as the first digit.
            // digits: which is a string of all the digits in the decimal. If the number
            // is negative the binary string will be inverted to get the correct ordering.
            // Example: 0.00123
            // Sign is 3 (bigger than 0)
            // Factor is -2 (move decimal point 2 positions right)
            // Digits are: 123

            HiveDecimalObjectInspector boi = (HiveDecimalObjectInspector) poi;
            HiveDecimal dec = boi.getPrimitiveJavaObject(o);

            // get the sign of the big decimal
            int sign = dec.compareTo(HiveDecimal.ZERO);

            // we'll encode the absolute value (sign is separate)
            dec = dec.abs();

            // get the scale factor to turn big decimal into a decimal < 1
            int factor = dec.precision() - dec.scale();
            factor = sign == 1 ? factor : -factor;

            // convert the absolute big decimal to string
            dec.scaleByPowerOfTen(Math.abs(dec.scale()));
            String digits = dec.unscaledValue().toString();

            // finally write out the pieces (sign, scale, digits)
            buffer.write((byte) (sign + 1), invert);
            buffer.write((byte) ((factor >> 24) ^ 0x80), invert);
            buffer.write((byte) (factor >> 16), invert);
            buffer.write((byte) (factor >> 8), invert);
            buffer.write((byte) factor, invert);
            serializeBytes(buffer, digits.getBytes(decimalCharSet), digits.length(),
                    sign == -1 ? !invert : invert);
            return;
        }

        default: {
            throw new RuntimeException("Unrecognized type: " + poi.getPrimitiveCategory());
        }
        }
    }
    case LIST: {
        ListObjectInspector loi = (ListObjectInspector) oi;
        ObjectInspector eoi = loi.getListElementObjectInspector();

        // \1 followed by each element
        int size = loi.getListLength(o);
        for (int eid = 0; eid < size; eid++) {
            buffer.write((byte) 1, invert);
            serialize(buffer, loi.getListElement(o, eid), eoi, invert);
        }
        // and \0 to terminate
        buffer.write((byte) 0, invert);
        return;
    }
    case MAP: {
        MapObjectInspector moi = (MapObjectInspector) oi;
        ObjectInspector koi = moi.getMapKeyObjectInspector();
        ObjectInspector voi = moi.getMapValueObjectInspector();

        // \1 followed by each key and then each value
        Map<?, ?> map = moi.getMap(o);
        for (Map.Entry<?, ?> entry : map.entrySet()) {
            buffer.write((byte) 1, invert);
            serialize(buffer, entry.getKey(), koi, invert);
            serialize(buffer, entry.getValue(), voi, invert);
        }
        // and \0 to terminate
        buffer.write((byte) 0, invert);
        return;
    }
    case STRUCT: {
        StructObjectInspector soi = (StructObjectInspector) oi;
        List<? extends StructField> fields = soi.getAllStructFieldRefs();

        for (int i = 0; i < fields.size(); i++) {
            serialize(buffer, soi.getStructFieldData(o, fields.get(i)), fields.get(i).getFieldObjectInspector(),
                    invert);
        }
        return;
    }
    case UNION: {
        UnionObjectInspector uoi = (UnionObjectInspector) oi;
        byte tag = uoi.getTag(o);
        buffer.write(tag, invert);
        serialize(buffer, uoi.getField(o), uoi.getObjectInspectors().get(tag), invert);
        return;
    }
    default: {
        throw new RuntimeException("Unrecognized type: " + oi.getCategory());
    }
    }

}

From source file:com.ebay.nest.io.sede.ByteStreamTypedSerDe.java

License:Apache License

@Override
public Object deserialize(Writable field) throws SerDeException {
    Object retObj = super.deserialize(field);
    BytesWritable b = (BytesWritable) field;
    bis.reset(b.getBytes(), b.getLength());
    return (retObj);
}

From source file:com.ebay.nest.io.sede.lazy.LazyBinary.java

License:Apache License

public LazyBinary(LazyBinary other) {
    super(other);
    BytesWritable incoming = other.getWritableObject();
    byte[] bytes = new byte[incoming.getLength()];
    System.arraycopy(incoming.getBytes(), 0, bytes, 0, incoming.getLength());
    data = new BytesWritable(bytes);
}

From source file:com.ebay.nest.io.sede.lazy.LazySimpleSerDe.java

License:Apache License

/**
 * Deserialize a row from the Writable to a LazyObject.
 *
 * @param field//w w  w. j  a  v a  2 s .c o  m
 *          the Writable that contains the data
 * @return The deserialized row Object.
 * @see SerDe#deserialize(Writable)
 */
@Override
public Object deserialize(Writable field) throws SerDeException {
    if (byteArrayRef == null) {
        byteArrayRef = new ByteArrayRef();
    }
    if (field instanceof BytesWritable) {
        BytesWritable b = (BytesWritable) field;
        // For backward-compatibility with hadoop 0.17
        byteArrayRef.setData(b.getBytes());
        cachedLazyStruct.init(byteArrayRef, 0, b.getLength());
    } else if (field instanceof Text) {
        Text t = (Text) field;
        byteArrayRef.setData(t.getBytes());
        cachedLazyStruct.init(byteArrayRef, 0, t.getLength());
    } else {
        throw new SerDeException(getClass().toString() + ": expects either BytesWritable or Text object!");
    }
    lastOperationSerialize = false;
    lastOperationDeserialize = true;
    return cachedLazyStruct;
}

From source file:com.ebay.nest.io.sede.lazy.LazyUtils.java

License:Apache License

/**
 * Write out the text representation of a Primitive Object to a UTF8 byte
 * stream./*from  w ww.jav  a 2  s  . co  m*/
 *
 * @param out
 *          The UTF8 byte OutputStream
 * @param o
 *          The primitive Object
 * @param needsEscape
 *          Whether a character needs escaping. This array should have size of
 *          128.
 */
public static void writePrimitiveUTF8(OutputStream out, Object o, PrimitiveObjectInspector oi, boolean escaped,
        byte escapeChar, boolean[] needsEscape) throws IOException {

    switch (oi.getPrimitiveCategory()) {
    case BOOLEAN: {
        boolean b = ((BooleanObjectInspector) oi).get(o);
        if (b) {
            out.write(trueBytes, 0, trueBytes.length);
        } else {
            out.write(falseBytes, 0, falseBytes.length);
        }
        break;
    }
    case BYTE: {
        LazyInteger.writeUTF8(out, ((ByteObjectInspector) oi).get(o));
        break;
    }
    case SHORT: {
        LazyInteger.writeUTF8(out, ((ShortObjectInspector) oi).get(o));
        break;
    }
    case INT: {
        LazyInteger.writeUTF8(out, ((IntObjectInspector) oi).get(o));
        break;
    }
    case LONG: {
        LazyLong.writeUTF8(out, ((LongObjectInspector) oi).get(o));
        break;
    }
    case FLOAT: {
        float f = ((FloatObjectInspector) oi).get(o);
        ByteBuffer b = Text.encode(String.valueOf(f));
        out.write(b.array(), 0, b.limit());
        break;
    }
    case DOUBLE: {
        double d = ((DoubleObjectInspector) oi).get(o);
        ByteBuffer b = Text.encode(String.valueOf(d));
        out.write(b.array(), 0, b.limit());
        break;
    }
    case STRING: {
        Text t = ((StringObjectInspector) oi).getPrimitiveWritableObject(o);
        writeEscaped(out, t.getBytes(), 0, t.getLength(), escaped, escapeChar, needsEscape);
        break;
    }

    case VARCHAR: {
        HiveVarcharWritable hc = ((HiveVarcharObjectInspector) oi).getPrimitiveWritableObject(o);
        Text t = hc.getTextValue();
        writeEscaped(out, t.getBytes(), 0, t.getLength(), escaped, escapeChar, needsEscape);
        break;
    }
    case BINARY: {
        BytesWritable bw = ((BinaryObjectInspector) oi).getPrimitiveWritableObject(o);
        byte[] toEncode = new byte[bw.getLength()];
        System.arraycopy(bw.getBytes(), 0, toEncode, 0, bw.getLength());
        byte[] toWrite = Base64.encodeBase64(toEncode);
        out.write(toWrite, 0, toWrite.length);
        break;
    }
    case DATE: {
        LazyDate.writeUTF8(out, ((DateObjectInspector) oi).getPrimitiveWritableObject(o));
        break;
    }
    case TIMESTAMP: {
        LazyTimestamp.writeUTF8(out, ((TimestampObjectInspector) oi).getPrimitiveWritableObject(o));
        break;
    }
    case DECIMAL: {
        HiveDecimal bd = ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o);
        ByteBuffer b = Text.encode(bd.toString());
        out.write(b.array(), 0, b.limit());
        break;
    }
    default: {
        throw new RuntimeException("Hive internal error.");
    }
    }
}

From source file:com.ebay.nest.io.sede.lazy.LazyUtils.java

License:Apache License

/**
 * gets a byte[] with copy of data from source BytesWritable
 * @param sourceBw - source BytesWritable
 *//*from w  w w.j  a  v a  2 s .  co m*/
public static byte[] createByteArray(BytesWritable sourceBw) {
    //TODO should replace with BytesWritable.copyData() once Hive
    //removes support for the Hadoop 0.20 series.
    return Arrays.copyOf(sourceBw.getBytes(), sourceBw.getLength());
}

From source file:com.ebay.nest.io.sede.lazybinary.LazyBinaryBinary.java

License:Apache License

LazyBinaryBinary(LazyBinaryPrimitive<WritableBinaryObjectInspector, BytesWritable> copy) {
    super(copy);/*from ww  w .ja  va2s .co  m*/
    BytesWritable incoming = copy.getWritableObject();
    byte[] outgoing = new byte[incoming.getLength()];
    System.arraycopy(incoming.getBytes(), 0, outgoing, 0, incoming.getLength());
    data = new BytesWritable(outgoing);
}

From source file:com.ebay.nest.io.sede.MetadataTypedColumnsetSerDe.java

License:Apache License

@Override
public Object deserialize(Writable field) throws SerDeException {
    String row = null;/*from w  ww .  ja v  a2s  .c o  m*/
    if (field instanceof BytesWritable) {
        BytesWritable b = (BytesWritable) field;
        try {
            row = Text.decode(b.getBytes(), 0, b.getLength());
        } catch (CharacterCodingException e) {
            throw new SerDeException(e);
        }
    } else if (field instanceof Text) {
        row = field.toString();
    }
    try {
        deserialize(deserializeCache, row, separator, nullString, splitLimit);
        if (columnNames != null) {
            assert (columnNames.size() == deserializeCache.col.size());
        }
        return deserializeCache;
    } catch (ClassCastException e) {
        throw new SerDeException(this.getClass().getName() + " expects Text or BytesWritable", e);
    } catch (Exception e) {
        throw new SerDeException(e);
    }
}

From source file:com.ebay.nest.io.sede.objectinspector.primitive.WritableBinaryObjectInspector.java

License:Apache License

@Override
public BytesWritable copyObject(Object o) {
    if (null == o) {
        return null;
    }// www.j a va 2 s .  c o m
    BytesWritable incoming = (BytesWritable) o;
    byte[] bytes = new byte[incoming.getLength()];
    System.arraycopy(incoming.getBytes(), 0, bytes, 0, incoming.getLength());
    return new BytesWritable(bytes);
}

From source file:com.ebay.nest.io.sede.SerDeUtils.java

License:Apache License

static void buildJSONString(StringBuilder sb, Object o, ObjectInspector oi, String nullStr) {

    switch (oi.getCategory()) {
    case PRIMITIVE: {
        PrimitiveObjectInspector poi = (PrimitiveObjectInspector) oi;
        if (o == null) {
            sb.append(nullStr);/*from   w  w  w .j  a va  2s.c  o m*/
        } else {
            switch (poi.getPrimitiveCategory()) {
            case BOOLEAN: {
                boolean b = ((BooleanObjectInspector) poi).get(o);
                sb.append(b ? "true" : "false");
                break;
            }
            case BYTE: {
                sb.append(((ByteObjectInspector) poi).get(o));
                break;
            }
            case SHORT: {
                sb.append(((ShortObjectInspector) poi).get(o));
                break;
            }
            case INT: {
                sb.append(((IntObjectInspector) poi).get(o));
                break;
            }
            case LONG: {
                sb.append(((LongObjectInspector) poi).get(o));
                break;
            }
            case FLOAT: {
                sb.append(((FloatObjectInspector) poi).get(o));
                break;
            }
            case DOUBLE: {
                sb.append(((DoubleObjectInspector) poi).get(o));
                break;
            }
            case STRING: {
                sb.append('"');
                sb.append(escapeString(((StringObjectInspector) poi).getPrimitiveJavaObject(o)));
                sb.append('"');
                break;
            }
            case VARCHAR: {
                sb.append('"');
                sb.append(
                        escapeString(((HiveVarcharObjectInspector) poi).getPrimitiveJavaObject(o).toString()));
                sb.append('"');
                break;
            }
            case DATE: {
                sb.append('"');
                sb.append(((DateObjectInspector) poi).getPrimitiveWritableObject(o));
                sb.append('"');
                break;
            }
            case TIMESTAMP: {
                sb.append('"');
                sb.append(((TimestampObjectInspector) poi).getPrimitiveWritableObject(o));
                sb.append('"');
                break;
            }
            case BINARY: {
                BytesWritable bw = ((BinaryObjectInspector) oi).getPrimitiveWritableObject(o);
                Text txt = new Text();
                txt.set(bw.getBytes(), 0, bw.getLength());
                sb.append(txt.toString());
                break;
            }
            case DECIMAL: {
                sb.append(((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o));
                break;
            }
            default:
                throw new RuntimeException("Unknown primitive type: " + poi.getPrimitiveCategory());
            }
        }
        break;
    }
    case LIST: {
        ListObjectInspector loi = (ListObjectInspector) oi;
        ObjectInspector listElementObjectInspector = loi.getListElementObjectInspector();
        List<?> olist = loi.getList(o);
        if (olist == null) {
            sb.append(nullStr);
        } else {
            sb.append(LBRACKET);
            for (int i = 0; i < olist.size(); i++) {
                if (i > 0) {
                    sb.append(COMMA);
                }
                buildJSONString(sb, olist.get(i), listElementObjectInspector, JSON_NULL);
            }
            sb.append(RBRACKET);
        }
        break;
    }
    case MAP: {
        MapObjectInspector moi = (MapObjectInspector) oi;
        ObjectInspector mapKeyObjectInspector = moi.getMapKeyObjectInspector();
        ObjectInspector mapValueObjectInspector = moi.getMapValueObjectInspector();
        Map<?, ?> omap = moi.getMap(o);
        if (omap == null) {
            sb.append(nullStr);
        } else {
            sb.append(LBRACE);
            boolean first = true;
            for (Object entry : omap.entrySet()) {
                if (first) {
                    first = false;
                } else {
                    sb.append(COMMA);
                }
                Map.Entry<?, ?> e = (Map.Entry<?, ?>) entry;
                buildJSONString(sb, e.getKey(), mapKeyObjectInspector, JSON_NULL);
                sb.append(COLON);
                buildJSONString(sb, e.getValue(), mapValueObjectInspector, JSON_NULL);
            }
            sb.append(RBRACE);
        }
        break;
    }
    case STRUCT: {
        StructObjectInspector soi = (StructObjectInspector) oi;
        List<? extends StructField> structFields = soi.getAllStructFieldRefs();
        if (o == null) {
            sb.append(nullStr);
        } else {
            sb.append(LBRACE);
            for (int i = 0; i < structFields.size(); i++) {
                if (i > 0) {
                    sb.append(COMMA);
                }
                sb.append(QUOTE);
                sb.append(structFields.get(i).getFieldName());
                sb.append(QUOTE);
                sb.append(COLON);
                buildJSONString(sb, soi.getStructFieldData(o, structFields.get(i)),
                        structFields.get(i).getFieldObjectInspector(), JSON_NULL);
            }
            sb.append(RBRACE);
        }
        break;
    }
    case UNION: {
        UnionObjectInspector uoi = (UnionObjectInspector) oi;
        if (o == null) {
            sb.append(nullStr);
        } else {
            sb.append(LBRACE);
            sb.append(uoi.getTag(o));
            sb.append(COLON);
            buildJSONString(sb, uoi.getField(o), uoi.getObjectInspectors().get(uoi.getTag(o)), JSON_NULL);
            sb.append(RBRACE);
        }
        break;
    }
    default:
        throw new RuntimeException("Unknown type in ObjectInspector!");
    }
}