[ https://issues.apache.org/jira/browse/BEAM-440?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kenneth Knowles updated BEAM-440: --------------------------------- Description: {{Create.values()}} with no arguments will default to a {{VoidCoder}}, unless one is set later with {{setCoder(Coder)}}. Although it will encode its input correctly, this seems like a bad choice in many cases. E.g., with {{Flatten}}: {code} PCollection<KV<SomeClass, Integer>> initial = p.apply("First", Create.<KV<SomeClass, Integer>>of()); PCollection<KV<SomeClass, Integer>> second = p.apply("Second", Create.of("a", "b")).apply(ParDo.of(new MyAvroDoFn())); PCollectionList .of(initial).and(second) .apply(Flatten.<KV<SomeClass, Integer>>pCollections()); {code} This crashes trying to cast a KV from "Second" to a Void.class. 1. Suggest throwing a warning in {{getDefaultOutputCoder}} when defaulting to {{VoidCoder}} for an empty elements list. Should this be an error? 2. Suggest adding something like {{Create.empty(TypeDescriptor)}} to handle this case properly. was: Create.values() with no arguments will default to a VoidCoder, unless one is set later with #setCoder(Coder). Although it will encode its input correctly, this seems like a bad choice in many cases. E.g., with Flatten: PCollection<KV<SomeClass, Integer>> initial = p.apply("First", Create.<KV<SomeClass, Integer>>of()); PCollection<KV<SomeClass, Integer>> second = p.apply("Second", Create.of("a", "b")).apply(ParDo.of(new MyAvroDoFn())); PCollectionList .of(initial).and(second) .apply(Flatten.<KV<SomeClass, Integer>>pCollections()); This crashes trying to cast a KV from "Second" to a Void.class. 1. Suggest throwing a warning in #getDefaultOutputCoder when defaulting to VoidCoder for an empty elements list. Should this be an error? 2. Suggest adding something like Create.empty(TypeDescriptor) to handle this case properly. > Create.values() returns a type-unsafe Coder > ------------------------------------------- > > Key: BEAM-440 > URL: https://issues.apache.org/jira/browse/BEAM-440 > Project: Beam > Issue Type: Bug > Components: sdk-java-core > Reporter: Daniel Halperin > Labels: newbie, starter > > {{Create.values()}} with no arguments will default to a {{VoidCoder}}, unless > one is set later with {{setCoder(Coder)}}. > Although it will encode its input correctly, this seems like a bad choice in > many cases. E.g., with {{Flatten}}: > {code} > PCollection<KV<SomeClass, Integer>> initial = p.apply("First", > Create.<KV<SomeClass, Integer>>of()); > PCollection<KV<SomeClass, Integer>> second = > p.apply("Second", Create.of("a", "b")).apply(ParDo.of(new > MyAvroDoFn())); > PCollectionList > .of(initial).and(second) > .apply(Flatten.<KV<SomeClass, Integer>>pCollections()); > {code} > This crashes trying to cast a KV from "Second" to a Void.class. > 1. Suggest throwing a warning in {{getDefaultOutputCoder}} when defaulting to > {{VoidCoder}} for an empty elements list. Should this be an error? > 2. Suggest adding something like {{Create.empty(TypeDescriptor)}} to handle > this case properly. -- This message was sent by Atlassian JIRA (v6.3.4#6332)