This is an automated email from the ASF dual-hosted git repository. iemejia pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/beam.git
commit be906f38c5cac14c465332b8179022085ed76c13 Author: Daniel Kulp <[email protected]> AuthorDate: Wed Apr 28 14:21:13 2021 -0400 [BEAM-12248] Reduce ArrayList allocation in Row/RowUtils --- .../main/java/org/apache/beam/sdk/values/Row.java | 28 ++++++++++------------ .../java/org/apache/beam/sdk/values/RowUtils.java | 13 ++++++++++ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java index a19d9b3..9aa9277 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java @@ -847,23 +847,19 @@ public abstract class Row implements Serializable { + " fields."); } - FieldOverrides fieldOverrides = new FieldOverrides(schema); - fieldOverrides.setOverrides(this.values); - - Row row; - if (!fieldOverrides.isEmpty()) { - row = - (Row) - new RowFieldMatcher() - .match( - new CapturingRowCases(schema, fieldOverrides), - FieldType.row(schema), - new RowPosition(FieldAccessDescriptor.create()), - null); - } else { - row = new RowWithStorage(schema, Collections.emptyList()); + if (!values.isEmpty()) { + FieldOverrides fieldOverrides = new FieldOverrides(schema, this.values); + if (!fieldOverrides.isEmpty()) { + return (Row) + new RowFieldMatcher() + .match( + new CapturingRowCases(schema, fieldOverrides), + FieldType.row(schema), + new RowPosition(FieldAccessDescriptor.create()), + null); + } } - return row; + return new RowWithStorage(schema, Collections.emptyList()); } } diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java index d3b1c21..a5f6210 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/values/RowUtils.java @@ -236,6 +236,11 @@ class RowUtils { this.rootSchema = rootSchema; } + FieldOverrides(Schema rootSchema, List<Object> overrides) { + this.topNode = new FieldAccessNode(rootSchema, overrides); + this.rootSchema = rootSchema; + } + boolean isEmpty() { return topNode.isEmpty(); } @@ -270,6 +275,14 @@ class RowUtils { nestedAccess = Lists.newArrayList(); } + FieldAccessNode(Schema schema, List<Object> overrides) { + fieldOverrides = Lists.newArrayListWithExpectedSize(schema.getFieldCount()); + for (Object value : overrides) { + fieldOverrides.add(new FieldOverride(value)); + } + nestedAccess = Lists.newArrayList(); + } + boolean isEmpty() { return fieldOverrides.isEmpty() && nestedAccess.isEmpty(); }
