Agree. It makes sense to me in order to be consistent between the PTransforms.

Regards
JB

Le 20 févr. 2018 à 16:08, à 16:08, Eugene Kirpichov <kirpic...@google.com> a 
écrit:
>Something similar was discussed a while ago, and lead to the suggestion
>in
>PTransform Style Guide:
>https://beam.apache.org/contribute/ptransform-style-guide/#setting-coders-on-output-collections
>
>This suggestion is currently not followed by ParDo, but your plan moves
>in
>that direction, so +1 to that.
>Remembering that ParDo's may have multiple outputs, though, I'd suggest
>to
>organize it using builder methods:
>ParDo.of(new MyFn())
>  .withOutputTags(...)
>  .withCoder(...coder for main output...)
>  .withCoder(tag1, coder1)
>  .withCoder(tag2, coder2)
>
>This would bring ParDo to be similar to all other transforms that allow
>specifying a coder.
>
>On Tue, Feb 20, 2018 at 3:41 AM Jean-Baptiste Onofré <j...@nanthrax.net>
>wrote:
>
>> Got the point.
>>
>> No problem for me. Could be a new core PTransform in core or
>extension.
>>
>> Regards
>> JB
>> Le 20 févr. 2018, à 11:17, Romain Manni-Bucau <rmannibu...@gmail.com>
>a
>> écrit:
>>>
>>> Yep, idea is to encapsulate the transfo. Today if you dev a dofn you
>are
>>> enforced to do a ptransform to force the coder which is a bit
>overkill in
>>> general. Being able to do it on the pardo would increase the
>composability
>>> on the user side and reduce the boilerplate needed for that.
>>>
>>> public class MyFn extends DoFn<A, B> {
>>>
>>>   // ...impl
>>>
>>>  public static PTransform<PCollection<A>, PCollection<B>> of(*...*)
>{
>>>       return ParDo.of(MyCoder.of(), new MyFn());
>>>   }
>>>
>>> }
>>>
>>> Instead of having to also impl in all fn library:
>>>
>>> @NoArgsConstructor(access = PROTECTED)
>>> @AllArgsConstructor
>>> class ParDoTransformCoderProvider<A, B> extends
>PTransform<PCollection<A>, PCollection<B>> {
>>>
>>>     private Coder<B> coder;
>>>
>>>     private DoFn<A, B> fn;
>>>
>>>     @Override
>>>     public PCollection<B> expand(final PCollection<A> input) {
>>>         return input.apply(ParDo.of(fn)).setCoder(coder);
>>>     }
>>> }
>>>
>>>
>>>
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |   Blog
>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>> <http://rmannibucau.wordpress.com> |  Github
>>> <https://github.com/rmannibucau> | LinkedIn
>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>>
><https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>
>>> 2018-02-20 11:03 GMT+01:00 Jean-Baptiste Onofré <j...@nanthrax.net>:
>>>
>>>> Not on the PCollection ? Only ParDo ?
>>>> Le 20 févr. 2018, à 10:50, Romain Manni-Bucau <
>rmannibu...@gmail.com>
>>>> a écrit:
>>>>>
>>>>> Hi guys,
>>>>>
>>>>> any objection to allow to pass with the pardo a coder? Idea is to
>avoid
>>>>> to have to write your own transform to be able to configure the
>coder when
>>>>> you start from a dofn and just do something like
>>>>>
>>>>> ParDo.of(new MyFn(), new MyCoder()) which is directly integrable
>into a
>>>>> pipeline properly.
>>>>>
>>>>> wdyt?
>>>>>
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau <https://twitter.com/rmannibucau> |   Blog
>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>>>> <http://rmannibucau.wordpress.com> |  Github
>>>>> <https://github.com/rmannibucau> | LinkedIn
>>>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>>>>
><https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>>>
>>>>
>>>

Reply via email to