apache / apache/beam

Add alternate constructor to improve byte encoding performance in SortValues

Open
#20,283 0 comments 0 reactions 0 assignees View on GitHub
extensions improvement java P3 sorter
Dominant language
Java
Stars
8.7k
Forks
4.7k
Avg merge
1d 20h
Merged PRs (30d)
196

Description

The `SortValues` transform operates on key-groups of `KV\>\>`. From those key groups it iterates through each element and uses `CoderUtils.encodeToByteArray` on each SecondaryKeyT-ValueT pair. This operation can be expensive and its parallelism is limited by the # of key groups.

I'd like to propose adding an alternative to `SortValuesDoFn` that operates on `KV\>\>` and can skip the encoding step within the key-group. The user's pipeline may be able to encode the data to bytes in a prior step in a much more parallelized and efficient way (i.e. in a `MapElements` transform). I've seen performance gains in every Dataflow metric from from patching this in my team's pipeline.

(I would visualize the alternative vs pre-existing constructors to look similar to generic vs specific Avro constructors, where the generic constructor has a static type and specific Avro has a parameterized T.)
 

What do you think? 

Imported from Jira [BEAM-10042](https://issues.apache.org/jira/browse/BEAM-10042). Original Jira may contain additional context.
Reported by: clairemcginty.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.