public void logExceptionMessage(byte[] bytes, int bytesStart, int bytesLength,
      Category dataComplexCategory, PrimitiveCategory dataPrimitiveCategory) {
    final String dataType;
    if (dataComplexCategory == null) {
      switch (dataPrimitiveCategory) {
      case BYTE:
        dataType = "TINYINT";
        break;
      case LONG:
        dataType = "BIGINT";
        break;
      case SHORT:
        dataType = "SMALLINT";
        break;
      default:
        dataType = dataPrimitiveCategory.toString();
        break;
      }
    } else {
      switch (dataComplexCategory) {
      case LIST:
      case MAP:
      case STRUCT:
      case UNION:
        dataType = dataComplexCategory.toString();
        break;
      default:
        throw new Error("Unexpected complex category " + dataComplexCategory);
      }
    }
    logExceptionMessage(bytes, bytesStart, bytesLength, dataType);
  }
Parse the byte[] and fill each field.

This is an adapted version of the parse method in the LazyStruct class.
They should parse things the same way.
serde/src/java/org/apache/hadoop/hive/serde2/lazy/fast/LazySimpleDeserializeRead.java