Package com.datasalt.pangool.io.Schema

Examples of com.datasalt.pangool.io.Schema.Field


  }

  public int compare(Schema schema, Criteria c, ITuple w1, int[] index1, ITuple w2,
                     int[] index2, Serializer[] serializers) {
    for (int i = 0; i < c.getElements().size(); i++) {
      Field field = schema.getField(i);
      SortElement e = c.getElements().get(i);
      Object o1 = w1.get(index1[i]);
      Object o2 = w2.get(index2[i]);

      // Handling with null values
      if (o1 == null || o2 == null) {
        int cmp = nullCompare(o1, o2, e);
        if (cmp != 0) {
          return cmp;
        } else {
          continue;
        }
      }

      // At this point we know that both values are not null.
      Serializer serializer = (serializers == null) ? null : serializers[i];
      int comparison = compareObjects(o1, o2, e.getCustomComparator(), field.getType(), serializer);
      if (comparison != 0) {
        return (e.getOrder() == Order.ASC ? comparison : -comparison);
      }
    }
    return 0;
View Full Code Here


      o.offset1 += n.nulls1.deser(b1, s1);
      o.offset2 += n.nulls2.deser(b2, s2);
    }

    for (int depth = 0; depth < criteria.getElements().size(); depth++) {
      Field field = schema.getField(depth);
      Field.Type type = field.getType();
      SortElement sortElement = criteria.getElements().get(depth);
      Order sort = sortElement.getOrder();
      RawComparator comparator = sortElement.getCustomComparator();

      // Control for nulls, if field is nullable.
      if (field.isNullable()) {
        Criteria.NullOrder nullOrder = sortElement.getNullOrder();
        if (n.nulls1.isSet(schema.getNullablePositionFromIndex(depth))) {
          if (n.nulls2.isSet(schema.getNullablePositionFromIndex(depth))) {
            // Both are null, so both are equal. No space is used. Continue.
            continue;
View Full Code Here

      }
      nulls.ser(out);
    }

    for (int i = 0; i < destinationSchema.getFields().size(); i++) {
      Field field = destinationSchema.getField(i);
      Type fieldType = field.getType();
      Object element = valueAt(i, tuple, translationTable);
      if (element == null) {
        if (field.isNullable()) {
          // Nullable null fields don't need serialization.
          continue;
        } else {
          raiseUnexpectedNullException(field, element);
        }
View Full Code Here

    Schema pangoolSchema = tuple.getSchema();
    for(org.apache.avro.Schema.Field avroField : avroSchema.getFields()) {
      int pos = avroField.pos();
      Object objRecord = record.get(pos);
      Field pangoolField = pangoolSchema.getField(pos);
      switch(pangoolField.getType()) {
      case INT:
      case LONG:
      case BOOLEAN:
      case FLOAT:
      case DOUBLE:
        tuple.set(pos, objRecord); // very optimistic
        break;
      case STRING: {
        if(!(tuple.get(pos) instanceof Utf8)) {
          tuple.set(pos, new com.datasalt.pangool.io.Utf8());
        }
        com.datasalt.pangool.io.Utf8 utf8 = (com.datasalt.pangool.io.Utf8) tuple.get(pos);
        if(objRecord instanceof String) {
          utf8.set((String) objRecord);
        } else if(objRecord instanceof Utf8) {
          Utf8 avroUtf8 = (Utf8) objRecord;
          utf8.set(avroUtf8.getBytes(), 0, avroUtf8.getByteLength());
        } else {
          throw new IOException("Not supported avro field " + org.apache.avro.Schema.Type.STRING + " with instance "
              + objRecord.getClass().getName());
        }
        break;
      }
      case ENUM: {
        Class clazz = pangoolField.getObjectClass();
        Enum e = Enum.valueOf(clazz, objRecord.toString());
        tuple.set(pos, e);
        break;
      }
      case BYTES:
        tuple.set(pos, objRecord); // TODO FIXME this should copy bytes really, not reference!
        break;
      case OBJECT:
        Deserializer customDeser = customDeserializers[pos];
        if(objRecord instanceof byte[]) {
          inputBuffer.reset((byte[]) objRecord, ((byte[]) objRecord).length);
        } else if(objRecord instanceof ByteBuffer) {
          ByteBuffer buffer = (ByteBuffer) objRecord;
          int offset = buffer.arrayOffset() + buffer.position();
          int length = buffer.limit() - buffer.position();
          inputBuffer.reset(buffer.array(), offset, length);
        } else {
          throw new PangoolRuntimeException("Can't convert to OBJECT from instance " + objRecord.getClass());
        }
        if(customDeser != null) {
          customDeser.open(inputBuffer);
          tuple.set(pos, customDeser.deserialize(tuple.get(pos))); // TODO FIXME avro deserializer shouldn't reuse
                                                                   // objects sometimes (UNION ?)
          customDeser.close(); // TODO is this ok ?
        } else {
          // no custom deser , then use Hadoop serializers registered in "io.serializations"
          Class clazz = pangoolField.getObjectClass();
          if(tuple.get(pos) == null || tuple.get(pos).getClass() != clazz) {
            tuple.set(pos, ReflectionUtils.newInstance(clazz, conf));
          }
          hadoopSer.deser(tuple.get(pos), inputBuffer);
        }
View Full Code Here

          "contains schema not expected." +
          "Expected schema '"+ pangoolSchema + " and actual: " + tuple.getSchema());
    }
    for(int i = 0; i < pangoolSchema.getFields().size(); i++) {
      Object obj = tuple.get(i);
      Field field = pangoolSchema.getField(i);
      if (obj == null){
        throw new IOException("Field '"
      + field.getName() + "' can't be null in tuple:" + tuple);
      }
     
      switch(field.getType()){
      case INT:
      case LONG:
      case FLOAT:
      case BOOLEAN:
      case DOUBLE:
      case BYTES:
        record.put(i, obj); //optimistic
        break;
      case OBJECT:
        Serializer customSer = customSerializers[i];
        DataOutputBuffer buffer = buffers[i];
        buffer.reset();
        if (customSer != null){
          customSer.open(buffer);
          customSer.serialize(obj);
          customSer.close(); //TODO is this safe ?
        } else {
          hadoopSer.ser(obj, buffer);
        }
        //TODO this byteBuffer instances should be cached and reused
        ByteBuffer byteBuffer = ByteBuffer.wrap(buffer.getData(), 0,buffer.getLength());
        record.put(i, byteBuffer);
        break;
      case ENUM:
        record.put(i,obj.toString());
        break;
      case STRING:
        record.put(i,new Utf8(obj.toString())); //could be directly String ?
        break;
      default:
          throw
          new IOException("Not correspondence to Avro type from Pangool type " + field.getType());
      }
    }
    return record;
  }
View Full Code Here

   * or deserialized
   * @return
   */
  public static Field createAvroField(String name,
       org.apache.avro.Schema avroSchema,  boolean isReflect){
    Field field = Field.createObject(name,Object.class);
    field.setObjectSerialization(AvroFieldSerialization.class);
    field.addProp("avro.schema",avroSchema.toString());
    field.addProp("avro.reflection",Boolean.toString(isReflect));
    return field;
  }
View Full Code Here

   * @param name Field's name
   * @param schema The schema of the field
   * @return
   */
  public static Field createTupleField(String name, Schema schema) {
    Field field = Field.createObject(name,Object.class);
    field.setObjectSerialization(TupleFieldSerialization.class);
    field.addProp("schema", schema.toString());
    return field;
  }
View Full Code Here


  public int compare(Schema schema, Criteria c, ITuple w1, int[] index1, ITuple w2,
      int[] index2,Serializer[] serializers) {
    for(int i = 0; i < c.getElements().size(); i++) {
      Field field = schema.getField(i);
      SortElement e = c.getElements().get(i);
      Object o1 = w1.get(index1[i]);
      Object o2 = w2.get(index2[i]);
      Serializer serializer = (serializers == null) ? null : serializers[i];
      int comparison = compareObjects(o1, o2, e.getCustomComparator(), field.getType(),serializer);
      if(comparison != 0) {
        return(e.getOrder() == Order.ASC ? comparison : -comparison);
      }
    }
    return 0;
View Full Code Here

  protected int compare(byte[] b1, int s1, byte[] b2, int s2, Schema schema,
      Criteria criteria, Offsets o) throws IOException {
    o.offset1 = s1;
    o.offset2 = s2;
    for(int depth = 0; depth < criteria.getElements().size(); depth++) {
      Field field = schema.getField(depth);
      Field.Type type = field.getType();
      SortElement sortElement = criteria.getElements().get(depth);
      Order sort = sortElement.getOrder();
      RawComparator comparator = sortElement.getCustomComparator();

      if(comparator != null) {
View Full Code Here

  public void readFields(ITuple tuple, Deserializer[] customDeserializers) throws IOException {
    Schema schema = tuple.getSchema();
    for(int index = 0; index < schema.getFields().size(); index++) {
      Deserializer customDeser = customDeserializers[index];
      Field field = schema.getField(index);
      switch(field.getType()) {
      case INT:
        tuple.set(index, WritableUtils.readVInt(input));
        break;
      case LONG:
        tuple.set(index, WritableUtils.readVLong(input));
        break;
      case DOUBLE:
        tuple.set(index, input.readDouble());
        break;
      case FLOAT:
        tuple.set(index, input.readFloat());
        break;
      case STRING:
        readUtf8(input, tuple, index);
        break;
      case BOOLEAN:
        byte b = input.readByte();
        tuple.set(index, (b != 0));
        break;
      case ENUM:
        readEnum(input, tuple, field.getObjectClass(), index);
        break;
      case BYTES:
        readBytes(input, tuple, index);
        break;
      case OBJECT:
        readCustomObject(input, tuple, field.getObjectClass(), index, customDeser);
        break;
      default:
        throw new IOException("Not supported type:" + field.getType());
      }
    }
  }
View Full Code Here

TOP

Related Classes of com.datasalt.pangool.io.Schema.Field

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.