avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "shiraeeshi (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1777) Select best matching record when writing a union in python
Date Tue, 07 Jun 2016 08:16:21 GMT

    [ https://issues.apache.org/jira/browse/AVRO-1777?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15318105#comment-15318105
] 

shiraeeshi commented on AVRO-1777:
----------------------------------

I believe my PR is relevant to this issue.

https://github.com/apache/avro/pull/95

Following the Java logic, I've added the GenericRecord type that stores schema.

> 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