code: def write_map(fo, datum, schema):
      
      if len(datum) > 0:
          write_long(fo, len(datum))
          vtype = schema['values']
          for key, val in iteritems(datum):
              write_utf8(fo, key)
              write_data(fo, val, vtype)
      write_long(fo, 0)
docs: Maps are encoded as a series of blocks.
  
      Each block consists of a long count value, followed by that many key/value
      pairs.  A block with count zero indicates the end of the map.  Each item is
      encoded per the map's value schema.
  
      If a block's count is negative, then the count is followed immediately by a
      long block size, indicating the number of bytes in the block. The actual
      count in this case is the absolute value of the count written.