@@ -61,6 +61,18 @@ public class DataTranslator implements DataTranslatorContext
6161{
6262 protected DataTranslationOptions _dataTranslationOptions ;
6363
64+ public static void backFillMissingDeafultInDataMap (DataMap map , RecordDataSchema dataSchema ) {
65+ for (RecordDataSchema .Field field : dataSchema .getFields ()) {
66+ DataSchema fieldType = field .getType ();
67+ if ( fieldType .getDereferencedType () != DataSchema .Type .ARRAY && fieldType .getDereferencedType () != DataSchema .Type .MAP ) {
68+ continue ;
69+ }
70+ if (field .getDefault () != null && (!map .containsKey (field .getName ()) || map .get (field .getName ()) == null )) {
71+ map .put (field .getName (), field .getDefault ());
72+ }
73+ }
74+ }
75+
6476 /**
6577 * Convert the given {@link DataMap} conforming to the provided {@link RecordDataSchema} to a {@link GenericRecord}.
6678 *
@@ -74,6 +86,7 @@ public class DataTranslator implements DataTranslatorContext
7486 */
7587 public static GenericRecord dataMapToGenericRecord (DataMap map , RecordDataSchema dataSchema ) throws DataTranslationException
7688 {
89+ backFillMissingDeafultInDataMap (map , dataSchema );
7790 Schema avroSchema = SchemaTranslator .dataToAvroSchema (dataSchema );
7891 return dataMapToGenericRecord (map , dataSchema , avroSchema , null );
7992 }
@@ -94,6 +107,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
94107 DataMapToAvroRecordTranslationOptions options )
95108 throws DataTranslationException
96109 {
110+ backFillMissingDeafultInDataMap (map , dataSchema );
97111 Schema avroSchema = SchemaTranslator .dataToAvroSchema (dataSchema );
98112 return dataMapToGenericRecord (map , dataSchema , avroSchema , options );
99113 }
@@ -102,6 +116,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
102116 DataMapToAvroRecordTranslationOptions options )
103117 throws DataTranslationException
104118 {
119+ backFillMissingDeafultInDataMap (map , dataSchema );
105120 DataMapToGenericRecordTranslator translator = new DataMapToGenericRecordTranslator (options );
106121 try
107122 {
@@ -116,6 +131,7 @@ public static GenericRecord dataMapToGenericRecord(DataMap map, RecordDataSchema
116131
117132 public static <T extends SpecificRecordBase > T dataMapToSpecificRecord (DataMap map , RecordDataSchema dataSchema ,
118133 Schema avroSchema ) throws DataTranslationException {
134+ backFillMissingDeafultInDataMap (map , dataSchema );
119135 DataMapToSpecificRecordTranslator translator = new DataMapToSpecificRecordTranslator ();
120136 try {
121137 T avroRecord = translator .translate (map , dataSchema , avroSchema );
@@ -145,6 +161,7 @@ public static <T extends SpecificRecordBase> T dataMapToSpecificRecord(DataMap m
145161 */
146162 public static GenericRecord dataMapToGenericRecord (DataMap map , RecordDataSchema dataSchema , Schema avroSchema ) throws DataTranslationException
147163 {
164+ backFillMissingDeafultInDataMap (map , dataSchema );
148165 return dataMapToGenericRecord (map , dataSchema , avroSchema , null );
149166 }
150167
0 commit comments