chamikaramj commented on a change in pull request #11185: [BEAM-8019] Updates
Python SDK to handle remote SDK coders and preserve tags added by remote SDKs
and propagate restriction coders.
URL: https://github.com/apache/beam/pull/11185#discussion_r400425818
##########
File path: sdks/python/apache_beam/runners/dataflow/dataflow_runner.py
##########
@@ -597,19 +611,47 @@ def _get_side_input_encoding(self, input_encoding):
},
}
- def _get_encoded_output_coder(self, transform_node, window_value=True):
- """Returns the cloud encoding of the coder for the output of a
transform."""
- from apache_beam.runners.portability.fn_api_runner.translations import \
- only_element
- if len(transform_node.outputs) == 1:
- output_tag = only_element(transform_node.outputs.keys())
- # TODO(robertwb): Handle type hints for multi-output transforms.
+ def _get_encoded_output_coder(
+ self, transform_node, window_value=True, output_tag=None):
+ """Returns the cloud encoding of the coder for the output of a transform.
+
+ If output_tag is not specified, we assume all outputs to have the same
+ encoding.
+ """
+ from apache_beam.transforms.core import RunnerAPIPTransformHolder
+ external_transform = isinstance(
+ transform_node.transform, RunnerAPIPTransformHolder)
+ if external_transform and not output_tag:
+ raise Exception('For external transforms, output_tag must be specified')
+
+ if not output_tag:
+ output_tag = next(iter(transform_node.outputs.keys()))
+
+ element_type = None
+ if external_transform:
element_type = transform_node.outputs[output_tag].element_type
+ # We perform special encoding for any external coders that cannot be
+ # parsed in Python SDK.
+ if isinstance(element_type, ElementTypeHolder):
+ coder = self._get_encoding_for_external_environment(element_type)
+ if window_value:
Review comment:
Done.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services