You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by do...@apache.org on 2021/05/16 17:50:13 UTC
[spark] branch master updated: [SPARK-35363][SQL][FOLLOWUP] Use
fresh name for findNextJoinRows instead of hardcoding it
This is an automated email from the ASF dual-hosted git repository.
dongjoon 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 5c1567b [SPARK-35363][SQL][FOLLOWUP] Use fresh name for findNextJoinRows instead of hardcoding it
5c1567b is described below
commit 5c1567ba9707d7f62119e69ab2da5157838f7371
Author: Cheng Su <ch...@fb.com>
AuthorDate: Sun May 16 10:49:31 2021 -0700
[SPARK-35363][SQL][FOLLOWUP] Use fresh name for findNextJoinRows instead of hardcoding it
### What changes were proposed in this pull request?
This is a followup from discussion in https://github.com/apache/spark/pull/32495#discussion_r632283178 . The hardcoded function name `findNextJoinRows` is not a real problem now as we always do code generation for SMJ's children separately. But this change is to make it future proof in case this assumption changed in the future.
### Why are the changes needed?
Fix the potential reliability issue.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Existing unit tests.
Closes #32548 from c21/smj-followup.
Authored-by: Cheng Su <ch...@fb.com>
Signed-off-by: Dongjoon Hyun <dh...@apple.com>
---
.../spark/sql/execution/joins/SortMergeJoinExec.scala | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/joins/SortMergeJoinExec.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/joins/SortMergeJoinExec.scala
index db6626b..41c2be8 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/joins/SortMergeJoinExec.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/joins/SortMergeJoinExec.scala
@@ -414,10 +414,12 @@ case class SortMergeJoinExec(
}
/**
- * Generate a function to scan both sides to find a match, returns the term for
- * matched one row from streamed side and buffered rows from buffered side.
+ * Generate a function to scan both sides to find a match, returns:
+ * 1. the function name
+ * 2. the term for matched one row from streamed side
+ * 3. the term for buffered rows from buffered side
*/
- private def genScanner(ctx: CodegenContext): (String, String) = {
+ private def genScanner(ctx: CodegenContext): (String, String, String) = {
// Create class member for next row from both sides.
// Inline mutable state since not many join operations in a task
val streamedRow = ctx.addMutableState("InternalRow", "streamedRow", forceInline = true)
@@ -518,9 +520,10 @@ case class SortMergeJoinExec(
// 1. Inner and Left Semi join: skip the row.
// 2. Left/Right Outer join: keep the row and return false (with `matches` being
// empty).
- ctx.addNewFunction("findNextJoinRows",
+ val findNextJoinRowsFuncName = ctx.freshName("findNextJoinRows")
+ ctx.addNewFunction(findNextJoinRowsFuncName,
s"""
- |private boolean findNextJoinRows(
+ |private boolean $findNextJoinRowsFuncName(
| scala.collection.Iterator streamedIter,
| scala.collection.Iterator bufferedIter) {
| $streamedRow = null;
@@ -574,7 +577,7 @@ case class SortMergeJoinExec(
|}
""".stripMargin, inlineToOuterClass = true)
- (streamedRow, matches)
+ (findNextJoinRowsFuncName, streamedRow, matches)
}
/**
@@ -647,7 +650,7 @@ case class SortMergeJoinExec(
val bufferedInput = ctx.addMutableState("scala.collection.Iterator", "bufferedInput",
v => s"$v = inputs[1];", forceInline = true)
- val (streamedRow, matches) = genScanner(ctx)
+ val (findNextJoinRowsFuncName, streamedRow, matches) = genScanner(ctx)
// Create variables for row from both sides.
val (streamedVars, streamedVarDecl) = createStreamedVars(ctx, streamedRow)
@@ -715,7 +718,7 @@ case class SortMergeJoinExec(
|$numOutput.add(1);
|${consume(ctx, resultVars)}
""".stripMargin
- val findNextJoinRows = s"findNextJoinRows($streamedInput, $bufferedInput)"
+ val findNextJoinRows = s"$findNextJoinRowsFuncName($streamedInput, $bufferedInput)"
val thisPlan = ctx.addReferenceObj("plan", this)
val eagerCleanup = s"$thisPlan.cleanupResources();"
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org