aboutsummaryrefslogtreecommitdiff
path: root/sql/core
diff options
context:
space:
mode:
Diffstat (limited to 'sql/core')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/DataFrame.scala17
1 files changed, 17 insertions, 0 deletions
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 c466d9e6cb..cf75e64e88 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
@@ -1150,6 +1150,23 @@ class DataFrame private[sql](
}
/**
+ * Returns a new [[DataFrame]] by adding a column with metadata.
+ */
+ private[spark] def withColumn(colName: String, col: Column, metadata: Metadata): DataFrame = {
+ val resolver = sqlContext.analyzer.resolver
+ val replaced = schema.exists(f => resolver(f.name, colName))
+ if (replaced) {
+ val colNames = schema.map { field =>
+ val name = field.name
+ if (resolver(name, colName)) col.as(colName, metadata) else Column(name)
+ }
+ select(colNames : _*)
+ } else {
+ select(Column("*"), col.as(colName, metadata))
+ }
+ }
+
+ /**
* Returns a new [[DataFrame]] with a column renamed.
* This is a no-op if schema doesn't contain existingName.
* @group dfops