Skip to content

Commit e7f30a4

Browse files
committed
[SPARK-12988] Can't drop columns that contain dots
1 parent fdcc351 commit e7f30a4

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,12 @@ class DataFrame private[sql](
12561256
@scala.annotation.varargs
12571257
def drop(colNames: String*): DataFrame = {
12581258
val resolver = sqlContext.analyzer.resolver
1259+
val output = queryExecution.analyzed.output
1260+
val unquotedCols = colNames.map (
1261+
f => f.stripPrefix("`").stripSuffix("`")
1262+
)
12591263
val remainingCols =
1260-
schema.filter(f => colNames.forall(n => !resolver(f.name, n))).map(f => Column(f.name))
1264+
output.filter(f => unquotedCols.forall(n => !resolver(f.name, n))).map(f => Column(f))
12611265
if (remainingCols.size == this.schema.size) {
12621266
this
12631267
} else {
@@ -1276,7 +1280,9 @@ class DataFrame private[sql](
12761280
def drop(col: Column): DataFrame = {
12771281
val expression = col match {
12781282
case Column(u: UnresolvedAttribute) =>
1279-
queryExecution.analyzed.resolveQuoted(u.name, sqlContext.analyzer.resolver).getOrElse(u)
1283+
val unquotedName = u.name.stripPrefix("`").stripSuffix("`")
1284+
queryExecution.analyzed.resolveQuoted(s"`${unquotedName}`",
1285+
sqlContext.analyzer.resolver).getOrElse(u)
12801286
case Column(expr: Expression) => expr
12811287
}
12821288
val attrs = this.logicalPlan.output

sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,4 +1270,29 @@ class DataFrameSuite extends QueryTest with SharedSQLContext {
12701270
Seq(1 -> "a").toDF("i", "j").filter($"i".cast(StringType) === "1"),
12711271
Row(1, "a"))
12721272
}
1273+
1274+
test("SPARK-12988: drop columns with ` in column name") {
1275+
val src = Seq((1, 2, 3)).toDF("a_b", "a.b", "a.c")
1276+
val df = src.drop("a_b")
1277+
checkAnswer(df, Row(2, 3))
1278+
assert(df.schema.map(_.name) === Seq("a.b", "a.c"))
1279+
val df1 = src.drop("a.b")
1280+
checkAnswer(df1, Row(1, 3))
1281+
assert(df1.schema.map(_.name) === Seq("a_b", "a.c"))
1282+
val df2 = src.drop("`a.c`")
1283+
checkAnswer(df2, Row(1, 2))
1284+
assert(df2.schema.map(_.name) === Seq("a_b", "a.b"))
1285+
val col1 = new Column("a_b")
1286+
val df4 = src.drop(col1)
1287+
checkAnswer(df4, Row(2, 3))
1288+
assert(df4.schema.map(_.name) === Seq("a.b", "a.c"))
1289+
val col2 = new Column("a.b")
1290+
val df5 = src.drop(col2)
1291+
checkAnswer(df5, Row(1, 3))
1292+
assert(df5.schema.map(_.name) === Seq("a_b", "a.c"))
1293+
val col3 = new Column("`a.c`")
1294+
val df6 = src.drop(col3)
1295+
checkAnswer(df6, Row(1, 2))
1296+
assert(df6.schema.map(_.name) === Seq("a_b", "a.b"))
1297+
}
12731298
}

0 commit comments

Comments
 (0)