Skip to content

Commit

Permalink
[SPARK-13327][SPARKR] Added parameter validations for colnames<-
Browse files Browse the repository at this point in the history
Author: Oscar D. Lara Yejas <odlaraye@oscars-mbp.attlocal.net>
Author: Oscar D. Lara Yejas <odlaraye@oscars-mbp.usca.ibm.com>

Closes #11220 from olarayej/SPARK-13312-3.
  • Loading branch information
Oscar D. Lara Yejas authored and shivaram committed Mar 11, 2016
1 parent 88fa866 commit 416e71a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
22 changes: 21 additions & 1 deletion R/pkg/R/DataFrame.R
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,28 @@ setMethod("colnames",
#' @rdname columns
#' @name colnames<-
setMethod("colnames<-",
signature(x = "DataFrame", value = "character"),
signature(x = "DataFrame"),
function(x, value) {

# Check parameter integrity
if (class(value) != "character") {
stop("Invalid column names.")
}

if (length(value) != ncol(x)) {
stop(
"Column names must have the same length as the number of columns in the dataset.")
}

if (any(is.na(value))) {
stop("Column names cannot be NA.")
}

# Check if the column names have . in it
if (any(regexec(".", value, fixed=TRUE)[[1]][1] != -1)) {
stop("Colum names cannot contain the '.' symbol.")
}

sdf <- callJMethod(x@sdf, "toDF", as.list(value))
dataFrame(sdf)
})
Expand Down
11 changes: 11 additions & 0 deletions R/pkg/inst/tests/testthat/test_sparkSQL.R
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,17 @@ test_that("names() colnames() set the column names", {
colnames(df) <- c("col3", "col4")
expect_equal(names(df)[1], "col3")

expect_error(colnames(df) <- c("sepal.length", "sepal_width"),
"Colum names cannot contain the '.' symbol.")
expect_error(colnames(df) <- c(1, 2), "Invalid column names.")
expect_error(colnames(df) <- c("a"),
"Column names must have the same length as the number of columns in the dataset.")
expect_error(colnames(df) <- c("1", NA), "Column names cannot be NA.")

# Note: if this test is broken, remove check for "." character on colnames<- method
irisDF <- suppressWarnings(createDataFrame(sqlContext, iris))
expect_equal(names(irisDF)[1], "Sepal_Length")

# Test base::colnames base::names
m2 <- cbind(1, 1:4)
expect_equal(colnames(m2, do.NULL = FALSE), c("col1", "col2"))
Expand Down

0 comments on commit 416e71a

Please sign in to comment.