code: public static Map<String, Object> getDefaultValueMap(Schema avroRecordSchema) {
      List<Field> defaultFields = new ArrayList<Field>();
      for (Field f : avroRecordSchema.getFields()) {
        if (f.defaultValue() != null) {
          // Need to create a new Field here or we will get
          // org.apache.avro.AvroRuntimeException: Field already used:
          // schemaVersion
          defaultFields.add(new Field(f.name(), f.schema(), f.doc(), f
              .defaultValue(), f.order()));
        }
      }
  
      Schema defaultSchema = Schema.createRecord(defaultFields);
      Schema emptyRecordSchema = Schema.createRecord(new ArrayList<Field>());
      DatumWriter<GenericRecord> writer = new GenericDatumWriter<GenericRecord>(
          emptyRecordSchema);
      DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>(
          emptyRecordSchema, defaultSchema);
  
      GenericRecord emptyRecord = new GenericData.Record(emptyRecordSchema);
      GenericRecord defaultRecord = AvroUtils.readAvroEntity(
          AvroUtils.writeAvroEntity(emptyRecord, writer), reader);
  
      Map<String, Object> defaultValueMap = new HashMap<String, Object>();
      for (Field f : defaultFields) {
        defaultValueMap.put(f.name(), defaultRecord.get(f.name()));
      }
      return defaultValueMap;
    }
docs: Get a map of field names to default values for an Avro schema.
  
  @param avroRecordSchema
  The schema to get the map of field names to values.
  @return The map.