Yes, this is explicitly supported. You can return named tuples and
dictionaries (with PCollections as values) as well.

On Tue, Aug 4, 2020 at 5:00 PM Harrison Green <[email protected]> wrote:
>
> Hi all,
>
> I've run into a situation where I would like to return two PCollections 
> during a PTransform. I am aware of the ParDo.with_outputs construct but in 
> this case, the PCollections are the flattened results of several other 
> transforms and it would be cleaner to just return multiple PCollections in a 
> tuple.
>
> I've tested this out with the following snippet and it seems to work (at 
> least on the direct runner):
>
> ---
> import apache_beam as beam
>
> @beam.ptransform_fn
> def test(pcoll):
>     a = pcoll | '1' >> beam.Map(lambda x: x+1)
>     b = pcoll | '2' >> beam.Map(lambda x: x+10)
>
>     return (a,b)
>
> with beam.Pipeline() as p:
>     c = p | beam.Create(list(range(10)))
>
>     a,b = c | test()
>
>     a | 'a' >> beam.Map(lambda x: print('a %d' % x))
>     b | 'b' >> beam.Map(lambda x: print('b %d' % x))
> ---
>
> I'm curious if this type of pipeline construction is well-supported and if I 
> will run into any issues on other runners.
>
> Thanks!
> - Harrison

Reply via email to