crunch-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adric Eckstein (JIRA)" <>
Subject [jira] [Created] (CRUNCH-547) AvroType operators can create nested unions
Date Tue, 21 Jul 2015 15:05:05 GMT
Adric Eckstein created CRUNCH-547:

             Summary: AvroType operators can create nested unions
                 Key: CRUNCH-547
             Project: Crunch
          Issue Type: Bug
          Components: IO
            Reporter: Adric Eckstein

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;
	public String getFoo() {
		return value.toString();
public static class Foo2 implements Foo {
	private final Integer value = 2;
	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);

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

View raw message