If we don't hear much from users, I would be for merging the change as long
as it is marked @Experimental until we get future feedback on its usage.

On Wed, Sep 19, 2018 at 2:19 PM Jeff Klukas <jklu...@mozilla.com> wrote:

> Thanks for the thoughts, Lukasz. These are exactly the kinds of issues I
> was hoping to get context on, since I don't yet have extensive experience
> with beam.
>
> I have not yet run into issues where the output coder was not able to be
> inferred. I expect this may be a non-issue, as the individual transforms
> used within a user-provided lambda expression would presumably expose the
> ability to specify a coder.
>
> I don't have enough context yet to comment on whether display data might
> be an issue, so I do hope the user list can provide input there.
>
> On Wed, Sep 19, 2018 at 4:52 PM Lukasz Cwik <lc...@google.com> wrote:
>
>> Thanks for the proposal and it does seem to make the API cleaner to build
>> anonymous composite transforms.
>>
>> In your experience have you had issues where the API doesn't work out
>> well because the PTransform:
>> * is not able to override how the output coder is inferred?
>> * can't supply display data?
>>
>> +user@beam.apache.org <user@beam.apache.org>, do users think that the
>> provided API would be useful enough for it to be added to the core SDK or
>> would the addition of the method provide noise/detract from the existing
>> API?
>>
>> On Mon, Sep 17, 2018 at 12:57 PM Jeff Klukas <jklu...@mozilla.com> wrote:
>>
>>> I've gone ahead and filed a JIRA Issue and GitHub PR to follow up on
>>> this suggestion and make it more concrete:
>>>
>>> https://issues.apache.org/jira/browse/BEAM-5413
>>> https://github.com/apache/beam/pull/6414
>>>
>>> On Fri, Sep 14, 2018 at 1:42 PM Jeff Klukas <jklu...@mozilla.com> wrote:
>>>
>>>> Hello all, I'm a data engineer at Mozilla working on a first project
>>>> using Beam. I've been impressed with the usability of the API as there are
>>>> good built-in solutions for handling many simple transformation cases with
>>>> minimal code, and wanted to discuss one bit of ergonomics that seems to be
>>>> missing.
>>>>
>>>> It appears that none of the existing PTransform factories are generic
>>>> enough to take in or output a PCollectionTuple, but we've found many use
>>>> cases where it's convenient to apply a few transforms on a PCollectionTuple
>>>> in a lambda expression.
>>>>
>>>> For example, we've defined several PTransforms that return main and
>>>> error output stream bundled in a PCollectionTuple. We defined a
>>>> CompositeTransform interface so that we could handle the error output in a
>>>> lambda expression like:
>>>>
>>>> pipeline
>>>>     .apply("attempt to deserialize messages", new
>>>> MyDeserializationTransform())
>>>>     .apply("write deserialization errors",
>>>>         CompositeTransform.of((PCollectionTuple input) -> {
>>>>             input.get(errorTag).apply(new MyErrorOutputTransform())
>>>>             return input.get(mainTag);
>>>>         })
>>>>     .apply("more processing on the deserialized messages", new
>>>> MyOtherTransform())
>>>>
>>>> I'd be interested in contributing a patch to add this functionality,
>>>> perhaps as a static method PTransform.compose(). Would that patch be
>>>> welcome? Are there other thoughts on naming?
>>>>
>>>> The full code of the CompositeTransform interface we're currently using
>>>> is included below.
>>>>
>>>>
>>>> public interface CompositeTransform<InputT extends PInput, OutputT
>>>> extends POutput> {
>>>>   OutputT expand(InputT input);
>>>>
>>>>   /**
>>>>    * The public factory method that serves as the entrypoint for users
>>>> to create a composite PTransform.
>>>>    */
>>>>   static <InputT extends PInput, OutputT extends POutput>
>>>>         PTransform<InputT, OutputT> of(CompositeTransform<InputT,
>>>> OutputT> transform) {
>>>>     return new PTransform<InputT, OutputT>() {
>>>>       @Override
>>>>       public OutputT expand(InputT input) {
>>>>         return transform.expand(input);
>>>>       }
>>>>     };
>>>>   }
>>>> }
>>>>
>>>>
>>>>
>>>>

Reply via email to