diff --git a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala index 518f9dcf94a70..ac20cbfdcdbe7 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala @@ -1256,8 +1256,12 @@ class DataFrame private[sql]( @scala.annotation.varargs def drop(colNames: String*): DataFrame = { val resolver = sqlContext.analyzer.resolver + val remainingCols = - schema.filter(f => colNames.forall(n => !resolver(f.name, n))).map(f => Column(f.name)) + schema.filter(f => colNames.forall(n => !resolver(f.name, n))) + .map(f => Column(UnresolvedAttribute.quoted(f.name))) + + if (remainingCols.size == this.schema.size) { this } else { 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 4ff99bdf2937d..6d6e60bcf60e4 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 @@ -36,6 +36,7 @@ import org.apache.spark.sql.types._ class DataFrameSuite extends QueryTest with SharedSQLContext { import testImplicits._ + test("analysis error should be eagerly reported") { // Eager analysis. withSQLConf(SQLConf.DATAFRAME_EAGER_ANALYSIS.key -> "true") { @@ -1291,4 +1292,11 @@ class DataFrameSuite extends QueryTest with SharedSQLContext { Seq(1 -> "a").toDF("i", "j").filter($"i".cast(StringType) === "1"), Row(1, "a")) } + + test("SPARK-12987: drop column ") { + val df = Seq((1, 2)).toDF("a_b", "a.c") + val df1 = df.drop("a_b") + checkAnswer(df1, Row(2)) + assert(df1.schema.map(_.name) === Seq("a.c")) + } }