avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steven Aerts (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AVRO-1777) Select best matching record when writing a union in python
Date Tue, 05 Jan 2016 13:44:39 GMT
Steven Aerts created AVRO-1777:
----------------------------------

             Summary: Select best matching record when writing a union in python
                 Key: AVRO-1777
                 URL: https://issues.apache.org/jira/browse/AVRO-1777
             Project: Avro
          Issue Type: Improvement
          Components: python
    Affects Versions: 1.7.7
            Reporter: Steven Aerts


Unlike javascript, python is not using wrapped types.
So when writing a union it needs to guess find out which type it will output.
At the moment it takes the last validating type.

I propose to take the type with the most matching fields.

So I propose to change in {{io.py}}:
{code}
# resolve union
index_of_schema = -1
for i, candidate_schema in enumerate(writers_schema.schemas):
  if validate(candidate_schema, datum):
    index_of_schema = i
if index_of_schema < 0: raise AvroTypeException(writers_schema, datum)
{code}
into
{code}
# resolve union
index_of_schema = -1
found_fields = -1
for i, candidate_schema in enumerate(writers_schema.schemas):
  if validate(candidate_schema, datum):
    nr_fields = candidate_schema.type in ['record', 'error', 'request'] and len(candidate_schema.fields)
or 1
    if nr_fields > found_fields:
      index_of_schema = i
      found_fields = nr_fields
if index_of_schema < 0: raise AvroTypeException(writers_schema, datum)
{code}

If you want, I can create a pull request for this.  And apply it both on py3 as py.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message