Class RowCoderGenerator

java.lang.Object
org.apache.beam.sdk.coders.RowCoderGenerator

public abstract class RowCoderGenerator extends Object
A utility for automatically generating a Coder for Row objects corresponding to a specific schema. The resulting coder is loaded into the default ClassLoader and returned.

When generate(Schema) is called, a new subclass of Coder<Row> is generated for the specified schema. This class is generated using low-level bytecode generation, and hardcodes encodings for all fields of the Schema. Empirically, this is 30-40% faster than a coder that introspects the schema.

The generated class corresponds to the following Java class:


 class SchemaRowCoder extendsCoder<Row> {
   // Generated array containing a coder for each field in the Schema.
   private static final Coder[] FIELD_CODERS;

   // Generated method to return the schema this class corresponds to. Used during code
   // generation.
   private static getSchema() {
     return schema;
   }

  @Override
   public void encode(T value, OutputStream outStream) {
     // Delegate to a method that evaluates each coder in the static array.
     encodeDelegate(FIELD_CODERS, value, outStream);
   }

  @Override
   public abstract T decode(InputStream inStream) {
     // Delegate to a method that evaluates each coder in the static array.
     return decodeDelegate(FIELD_CODERS, inStream);
   }
 }
 
  • Constructor Details

    • RowCoderGenerator

      public RowCoderGenerator()
  • Method Details

    • overrideEncodingPositions

      public static void overrideEncodingPositions(UUID uuid, Map<String,Integer> encodingPositions)
    • generate

      public static Coder<Row> generate(Schema schema)