Repository: spark
Updated Branches:
  refs/heads/branch-1.6 9b5dc5c48 -> 5f86c001c


[SPARK-11633][SQL] LogicalRDD throws TreeNode Exception : Failed to Copy Node

When handling self joins, the implementation did not consider the case 
insensitivity of HiveContext. It could cause an exception as shown in the JIRA:
```
TreeNodeException: Failed to copy node.
```

The fix is low risk. It avoids unnecessary attribute replacement. It should not 
affect the existing behavior of self joins. Also added the test case to cover 
this case.

Author: gatorsmile <[email protected]>

Closes #9762 from gatorsmile/joinMakeCopy.

(cherry picked from commit 276a7e130252c0e7aba702ae5570b3c4f424b23b)
Signed-off-by: Michael Armbrust <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/5f86c001
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/5f86c001
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/5f86c001

Branch: refs/heads/branch-1.6
Commit: 5f86c001ccf6eca553d74456cebe9585d1ec028b
Parents: 9b5dc5c
Author: gatorsmile <[email protected]>
Authored: Thu Nov 19 12:45:04 2015 -0800
Committer: Michael Armbrust <[email protected]>
Committed: Thu Nov 19 12:45:15 2015 -0800

----------------------------------------------------------------------
 .../org/apache/spark/sql/execution/ExistingRDD.scala  |  4 ++++
 .../scala/org/apache/spark/sql/DataFrameSuite.scala   | 14 ++++++++++++++
 2 files changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/5f86c001/sql/core/src/main/scala/org/apache/spark/sql/execution/ExistingRDD.scala
----------------------------------------------------------------------
diff --git 
a/sql/core/src/main/scala/org/apache/spark/sql/execution/ExistingRDD.scala 
b/sql/core/src/main/scala/org/apache/spark/sql/execution/ExistingRDD.scala
index 62620ec..623348f 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/ExistingRDD.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/ExistingRDD.scala
@@ -74,6 +74,10 @@ private[sql] case class LogicalRDD(
 
   override def children: Seq[LogicalPlan] = Nil
 
+  override protected final def otherCopyArgs: Seq[AnyRef] = {
+    sqlContext :: Nil
+  }
+
   override def newInstance(): LogicalRDD.this.type =
     LogicalRDD(output.map(_.newInstance()), 
rdd)(sqlContext).asInstanceOf[this.type]
 

http://git-wip-us.apache.org/repos/asf/spark/blob/5f86c001/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
----------------------------------------------------------------------
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala 
b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
index 6399b01..dd6d065 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
@@ -1110,6 +1110,20 @@ class DataFrameSuite extends QueryTest with 
SharedSQLContext {
     }
   }
 
+  // This test case is to verify a bug when making a new instance of 
LogicalRDD.
+  test("SPARK-11633: LogicalRDD throws TreeNode Exception: Failed to Copy 
Node") {
+    withSQLConf(SQLConf.CASE_SENSITIVE.key -> "false") {
+      val rdd = sparkContext.makeRDD(Seq(Row(1, 3), Row(2, 1)))
+      val df = sqlContext.createDataFrame(
+        rdd,
+        new StructType().add("f1", IntegerType).add("f2", IntegerType),
+        needsConversion = false).select($"F1", $"f2".as("f2"))
+      val df1 = df.as("a")
+      val df2 = df.as("b")
+      checkAnswer(df1.join(df2, $"a.f2" === $"b.f2"), Row(1, 3, 1, 3) :: 
Row(2, 1, 2, 1) :: Nil)
+    }
+  }
+
   test("SPARK-10656: completely support special chars") {
     val df = Seq(1 -> "a").toDF("i_$.a", "d^'a.")
     checkAnswer(df.select(df("*")), Row(1, "a"))


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to