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 <yangji...@baidu.com> 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 <yangji...@baidu.com> Signed-off-by: Sean Owen <sro...@gmail.com> --- .../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: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org