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

Reply via email to