Skip to content
Snippets Groups Projects
Commit b734ed0c authored by Eric Liang's avatar Eric Liang Committed by Michael Armbrust
Browse files

[SPARK-3395] [SQL] DSL sometimes incorrectly reuses attribute ids, breaking queries

This resolves https://issues.apache.org/jira/browse/SPARK-3395

Author: Eric Liang <ekl@google.com>

Closes #2266 from ericl/spark-3395 and squashes the following commits:

7f2b6f0 [Eric Liang] add regression test
05bd1e4 [Eric Liang] in the dsl, create a new schema instance in each applySchema
parent 25b5b867
No related branches found
No related tags found
No related merge requests found
...@@ -428,7 +428,8 @@ class SchemaRDD( ...@@ -428,7 +428,8 @@ class SchemaRDD(
*/ */
private def applySchema(rdd: RDD[Row]): SchemaRDD = { private def applySchema(rdd: RDD[Row]): SchemaRDD = {
new SchemaRDD(sqlContext, new SchemaRDD(sqlContext,
SparkLogicalPlan(ExistingRdd(queryExecution.analyzed.output, rdd))(sqlContext)) SparkLogicalPlan(
ExistingRdd(queryExecution.analyzed.output.map(_.newInstance), rdd))(sqlContext))
} }
// ======================================================================= // =======================================================================
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
package org.apache.spark.sql package org.apache.spark.sql
import org.apache.spark.sql.catalyst.analysis._ import org.apache.spark.sql.catalyst.analysis._
import org.apache.spark.sql.catalyst.expressions._
import org.apache.spark.sql.catalyst.plans._
import org.apache.spark.sql.test._ import org.apache.spark.sql.test._
/* Implicits */ /* Implicits */
...@@ -133,6 +135,18 @@ class DslQuerySuite extends QueryTest { ...@@ -133,6 +135,18 @@ class DslQuerySuite extends QueryTest {
mapData.take(1).toSeq) mapData.take(1).toSeq)
} }
test("SPARK-3395 limit distinct") {
val filtered = TestData.testData2
.distinct()
.orderBy(SortOrder('a, Ascending), SortOrder('b, Ascending))
.limit(1)
.registerTempTable("onerow")
checkAnswer(
sql("select * from onerow inner join testData2 on onerow.a = testData2.a"),
(1, 1, 1, 1) ::
(1, 1, 1, 2) :: Nil)
}
test("average") { test("average") {
checkAnswer( checkAnswer(
testData2.groupBy()(avg('a)), testData2.groupBy()(avg('a)),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment