pig/src/main/java/com/twitter/elephantbird/pig/util/PigToThrift.java
@SuppressWarnings("unchecked")
  private static TBase<?, ?> toThrift(TStructDescriptor tDesc, Tuple tuple) {
    int size = tDesc.getFields().size();
    int tupleSize = tuple.size();
    @SuppressWarnings("rawtypes")
    TBase tObj = newTInstance(tDesc.getThriftClass());
    for(int i = 0; i<size && i<tupleSize; i++) {
      Object pObj;
      try {
        pObj = tuple.get(i);
      } catch (ExecException e) {
        throw new RuntimeException(e);
      }
      if (pObj != null) {
        Field field = tDesc.getFieldAt(i);
        try {
          tObj.setFieldValue(field.getFieldIdEnum(), toThriftValue(field, pObj));
        } catch (Exception e) {
          String value = String.valueOf(tObj);
          final int max_length = 100;
          if (max_length < value.length()) {
            value = value.substring(0, max_length - 3) + "...";
          }
          String type = tObj == null ? "unknown" : tObj.getClass().getName();
          throw new RuntimeException(String.format(
              "Failed to set field '%s' using tuple value '%s' of type '%s' at index %d",
              field.getName(), value, type, i), e);
        }
      }
      // if tDesc is a union, at least one field needs to be non-null.
      // user is responsible for ensuring that.
    }
    return tObj;
  }
@SuppressWarnings("unchecked")
  private static TBase<?, ?> toThrift(TStructDescriptor tDesc, Tuple tuple) {
    int size = tDesc.getFields().size();
    int tupleSize = tuple.size();
    @SuppressWarnings("rawtypes")
    TBase tObj = newTInstance(tDesc.getThriftClass());
    for(int i = 0; i<size && i<tupleSize; i++) {
      Object pObj;
      try {
        pObj = tuple.get(i);
      } catch (ExecException e) {
        throw new RuntimeException(e);
      }
      if (pObj != null) {
        Field field = tDesc.getFieldAt(i);
        try {
          tObj.setFieldValue(field.getFieldIdEnum(), toThriftValue(field, pObj));
        } catch (Exception e) {
          String value = String.valueOf(tObj);
          final int max_length = 100;
          if (max_length < value.length()) {
            value = value.substring(0, max_length - 3) + "...";
          }
          String type = tObj == null ? "unknown" : tObj.getClass().getName();
          throw new RuntimeException(String.format(
              "Failed to set field '%s' using tuple value '%s' of type '%s' at index %d",
              field.getName(), value, type, i), e);
        }
      }
      // if tDesc is a union, at least one field needs to be non-null.
      // user is responsible for ensuring that.
    }
    return tObj;
  }
@ SuppressWarnings ( "unchecked" ) private static TBase < ? , ? > toThrift ( TStructDescriptor tDesc , Tuple tuple ) { int size = tDesc . getFields ( ) . size ( ) ; int tupleSize = tuple . size ( ) ; @ SuppressWarnings ( "rawtypes" ) TBase tObj = newTInstance ( tDesc . getThriftClass ( ) ) ; for ( int i = 0 ; i < size && i < tupleSize ; i ++ ) { Object pObj ; try { pObj = tuple . get ( i ) ; } catch ( ExecException e ) { throw new RuntimeException ( e ) ; } if ( pObj != null ) { Field field = tDesc . getFieldAt ( i ) ; try { tObj . setFieldValue ( field . getFieldIdEnum ( ) , toThriftValue ( field , pObj ) ) ; } catch ( Exception e ) { String value = String . valueOf ( tObj ) ; final int max_length = 100 ; if ( max_length < value . length ( ) ) { value = value . substring ( 0 , max_length - 3 ) + "..." ; } String type = tObj == null ? "unknown" : tObj . getClass ( ) . getName ( ) ; throw new RuntimeException ( String . format ( "Failed to set field '%s' using tuple value '%s' of type '%s' at index %d" , field . getName ( ) , value , type , i ) , e ) ; } } // if tDesc is a union, at least one field needs to be non-null. // user is responsible for ensuring that. } return tObj ; }
Construct a Thrift object from the tuple.
Construct a Thrift object from the tuple .