This is an automated email from the ASF dual-hosted git repository.
srowen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new 41049363ca1 [SPARK-40252][SQL] Replace
`Stream.collect(Collectors.joining)` with `StringJoiner` Api
41049363ca1 is described below
commit 41049363ca1e102a91bf15ef37b61eaeb5a1e0c5
Author: yangjie01 <[email protected]>
AuthorDate: Mon Aug 29 21:35:48 2022 -0500
[SPARK-40252][SQL] Replace `Stream.collect(Collectors.joining)` with
`StringJoiner` Api
### What changes were proposed in this pull request?
This pr replace `Stream.collect(Collectors.joining(delimiter))` with
`StringJoiner` Api to get better string join performance.
### Why are the changes needed?
A minor performance improvement.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Pass Github Actions.
Closes #37701 from LuciferYang/SPARK-40252.
Authored-by: yangjie01 <[email protected]>
Signed-off-by: Sean Owen <[email protected]>
---
.../sql/connector/catalog/IdentifierImpl.java | 12 ++++++----
.../sql/connector/util/V2ExpressionSQLBuilder.java | 28 ++++++++++++++++++----
2 files changed, 30 insertions(+), 10 deletions(-)
diff --git
a/sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/IdentifierImpl.java
b/sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/IdentifierImpl.java
index ce8734b1a16..d9c696ab811 100644
---
a/sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/IdentifierImpl.java
+++
b/sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/IdentifierImpl.java
@@ -19,8 +19,7 @@ package org.apache.spark.sql.connector.catalog;
import java.util.Arrays;
import java.util.Objects;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.StringJoiner;
import com.google.common.base.Preconditions;
@@ -55,9 +54,12 @@ class IdentifierImpl implements Identifier {
@Override
public String toString() {
- return Stream.concat(Stream.of(namespace), Stream.of(name))
- .map(package$.MODULE$::quoteIfNeeded)
- .collect(Collectors.joining("."));
+ StringJoiner joiner = new StringJoiner(".");
+ for (String p : namespace) {
+ joiner.add(package$.MODULE$.quoteIfNeeded(p));
+ }
+ joiner.add(package$.MODULE$.quoteIfNeeded(name));
+ return joiner.toString();
}
@Override
diff --git
a/sql/catalyst/src/main/java/org/apache/spark/sql/connector/util/V2ExpressionSQLBuilder.java
b/sql/catalyst/src/main/java/org/apache/spark/sql/connector/util/V2ExpressionSQLBuilder.java
index 4fa132ccfd1..315b3309054 100644
---
a/sql/catalyst/src/main/java/org/apache/spark/sql/connector/util/V2ExpressionSQLBuilder.java
+++
b/sql/catalyst/src/main/java/org/apache/spark/sql/connector/util/V2ExpressionSQLBuilder.java
@@ -19,6 +19,7 @@ package org.apache.spark.sql.connector.util;
import java.util.Arrays;
import java.util.List;
+import java.util.StringJoiner;
import java.util.stream.Collectors;
import org.apache.spark.sql.connector.expressions.Cast;
@@ -232,7 +233,7 @@ public class V2ExpressionSQLBuilder {
if (list.isEmpty()) {
return "CASE WHEN " + v + " IS NULL THEN NULL ELSE FALSE END";
}
- return v + " IN (" + list.stream().collect(Collectors.joining(", ")) + ")";
+ return joinListToString(list, ", ", v + " IN (", ")");
}
protected String visitIsNull(String v) {
@@ -324,16 +325,15 @@ public class V2ExpressionSQLBuilder {
}
protected String visitSQLFunction(String funcName, String[] inputs) {
- return funcName + "(" +
Arrays.stream(inputs).collect(Collectors.joining(", ")) + ")";
+ return joinArrayToString(inputs, ", ", funcName + "(", ")");
}
protected String visitAggregateFunction(
String funcName, boolean isDistinct, String[] inputs) {
if (isDistinct) {
- return funcName +
- "(DISTINCT " + Arrays.stream(inputs).collect(Collectors.joining(", "))
+ ")";
+ return joinArrayToString(inputs, ", ", funcName + "(DISTINCT ", ")");
} else {
- return funcName + "(" +
Arrays.stream(inputs).collect(Collectors.joining(", ")) + ")";
+ return joinArrayToString(inputs, ", ", funcName + "(", ")");
}
}
@@ -375,4 +375,22 @@ public class V2ExpressionSQLBuilder {
protected String visitExtract(String field, String source) {
return "EXTRACT(" + field + " FROM " + source + ")";
}
+
+ private String joinArrayToString(
+ String[] inputs, CharSequence delimiter, CharSequence prefix,
CharSequence suffix) {
+ StringJoiner joiner = new StringJoiner(delimiter, prefix, suffix);
+ for (String input : inputs) {
+ joiner.add(input);
+ }
+ return joiner.toString();
+ }
+
+ private String joinListToString(
+ List<String> inputs, CharSequence delimiter, CharSequence prefix,
CharSequence suffix) {
+ StringJoiner joiner = new StringJoiner(delimiter, prefix, suffix);
+ for (String input : inputs) {
+ joiner.add(input);
+ }
+ return joiner.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]