[ https://issues.apache.org/jira/browse/CRUNCH-547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14639392#comment-14639392 ]
Adric Eckstein commented on CRUNCH-547: --------------------------------------- Makes sense, and I don't think it really affects anything I'm doing. Just wanted to make sure I wasn't missing some core concept in there. > AvroType operators can create nested unions > ------------------------------------------- > > Key: CRUNCH-547 > URL: https://issues.apache.org/jira/browse/CRUNCH-547 > Project: Crunch > Issue Type: Bug > Components: IO > Reporter: Adric Eckstein > Fix For: 0.13.0 > > Attachments: CRUNCH-547.patch, CRUNCH-547b.patch > > > When using avro reflection to create PTypes, the type might represent a union > type, as specified by the @Union annotation. Derived types from this, such > as tableOf() and collections() will create a null union from this (already > union) type and create a nested union which throws an AvroRuntimeException. > @org.apache.avro.reflect.Union({ Foo1.class, Foo2.class }) > public static interface Foo { > public String getFoo(); > } > public static class Foo1 implements Foo { > private final Double value = 1.0; > @Override > public String getFoo() { > return value.toString(); > } > } > public static class Foo2 implements Foo { > private final Integer value = 2; > @Override > public String getFoo() { > return value.toString(); > } > } > Schema schema = ReflectData.get().getSchema(Foo.class); > AvroType<Foo> ptype = Avros.reflects(Foo.class, schema); > Avros.tableOf(Avros.strings(), ptype); > Avros.collections(ptype); > Exception in thread "main" org.apache.avro.AvroRuntimeException: Nested > union: [["double","string"],"null"] > ... > Seems like the methods Avros.allowNulls() and AvroTableType.nullable() both > are calling Schema.createUnion(unionSchema, nullSchema), and could add an > extra case statement to use the already existing union schema. -- This message was sent by Atlassian JIRA (v6.3.4#6332)