File tree Expand file tree Collapse file tree 4 files changed +39
-1
lines changed
main/scala/org/apache/spark/sql
test/scala/org/apache/spark/sql Expand file tree Collapse file tree 4 files changed +39
-1
lines changed Original file line number Diff line number Diff line change @@ -36,7 +36,8 @@ private[sql] object DataFrame {
3636
3737
3838/**
39- * A collection of rows that have the same columns.
39+ * :: Experimental ::
40+ * A distributed collection of data organized into named columns.
4041 *
4142 * A [[DataFrame ]] is equivalent to a relational table in Spark SQL, and can be created using
4243 * various functions in [[SQLContext ]].
@@ -72,6 +73,7 @@ private[sql] object DataFrame {
7273 * }}}
7374 */
7475// TODO: Improve documentation.
76+ @ Experimental
7577trait DataFrame extends RDDApi [Row ] {
7678
7779 val sqlContext : SQLContext
@@ -425,6 +427,11 @@ trait DataFrame extends RDDApi[Row] {
425427 */
426428 def addColumn (colName : String , col : Column ): DataFrame
427429
430+ /**
431+ * Returns a new [[DataFrame ]] with a column renamed.
432+ */
433+ def renameColumn (existingName : String , newName : String ): DataFrame
434+
428435 /**
429436 * Returns the first `n` rows.
430437 */
Original file line number Diff line number Diff line change @@ -238,6 +238,14 @@ private[sql] class DataFrameImpl protected[sql](
238238 select(Column (" *" ), col.as(colName))
239239 }
240240
241+ override def renameColumn (existingName : String , newName : String ): DataFrame = {
242+ val colNames = schema.map { field =>
243+ val name = field.name
244+ if (name == existingName) Column (name).as(newName) else Column (name)
245+ }
246+ select(colNames :_* )
247+ }
248+
241249 override def head (n : Int ): Array [Row ] = limit(n).collect()
242250
243251 override def head (): Row = head(1 ).head
Original file line number Diff line number Diff line change @@ -108,6 +108,8 @@ private[sql] class IncomputableColumn(protected[sql] val expr: Expression) exten
108108
109109 override def addColumn (colName : String , col : Column ): DataFrame = err()
110110
111+ override def renameColumn (existingName : String , newName : String ): DataFrame = err()
112+
111113 override def head (n : Int ): Array [Row ] = err()
112114
113115 override def head (): Row = err()
Original file line number Diff line number Diff line change @@ -313,6 +313,27 @@ class DataFrameSuite extends QueryTest {
313313 )
314314 }
315315
316+ test(" addColumn" ) {
317+ val df = testData.toDataFrame.addColumn(" newCol" , col(" key" ) + 1 )
318+ checkAnswer(
319+ df,
320+ testData.collect().map { case Row (key : Int , value : String ) =>
321+ Row (key, value, key + 1 )
322+ }.toSeq)
323+ assert(df.schema.map(_.name).toSeq === Seq (" key" , " value" , " newCol" ))
324+ }
325+
326+ test(" renameColumn" ) {
327+ val df = testData.toDataFrame.addColumn(" newCol" , col(" key" ) + 1 )
328+ .renameColumn(" value" , " valueRenamed" )
329+ checkAnswer(
330+ df,
331+ testData.collect().map { case Row (key : Int , value : String ) =>
332+ Row (key, value, key + 1 )
333+ }.toSeq)
334+ assert(df.schema.map(_.name).toSeq === Seq (" key" , " valueRenamed" , " newCol" ))
335+ }
336+
316337 test(" apply on query results (SPARK-5462)" ) {
317338 val df = testData.sqlContext.sql(" select key from testData" )
318339 checkAnswer(df(" key" ), testData.select(' key ).collect().toSeq)
You can’t perform that action at this time.
0 commit comments