You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ie...@apache.org on 2021/04/29 06:15:21 UTC
[beam] 02/03: [BEAM-12248] Reduce ArrayList allocation in
Row/RowUtils
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 <dk...@apache.org>
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();
}