Github user HyukjinKwon commented on a diff in the pull request:

    https://github.com/apache/spark/pull/23184#discussion_r238057238
  
    --- Diff: R/pkg/R/functions.R ---
    @@ -2254,40 +2255,48 @@ setMethod("date_format", signature(y = "Column", x 
= "character"),
                 column(jc)
               })
     
    +setClassUnion("characterOrstructTypeOrColumn", c("character", 
"structType", "Column"))
    +
     #' @details
     #' \code{from_json}: Parses a column containing a JSON string into a 
Column of \code{structType}
     #' with the specified \code{schema} or array of \code{structType} if 
\code{as.json.array} is set
     #' to \code{TRUE}. If the string is unparseable, the Column will contain 
the value NA.
     #'
     #' @rdname column_collection_functions
     #' @param as.json.array indicating if input string is JSON array of 
objects or a single object.
    -#' @aliases from_json from_json,Column,characterOrstructType-method
    +#' @aliases from_json from_json,Column,characterOrstructTypeOrColumn-method
     #' @examples
     #'
     #' \dontrun{
     #' df2 <- sql("SELECT named_struct('date', cast('2000-01-01' as date)) as 
d")
     #' df2 <- mutate(df2, d2 = to_json(df2$d, dateFormat = 'dd/MM/yyyy'))
     #' schema <- structType(structField("date", "string"))
     #' head(select(df2, from_json(df2$d2, schema, dateFormat = 'dd/MM/yyyy')))
    -
     #' df2 <- sql("SELECT named_struct('name', 'Bob') as people")
     #' df2 <- mutate(df2, people_json = to_json(df2$people))
     #' schema <- structType(structField("name", "string"))
     #' head(select(df2, from_json(df2$people_json, schema)))
    -#' head(select(df2, from_json(df2$people_json, "name STRING")))}
    +#' head(select(df2, from_json(df2$people_json, "name STRING")))
    +#' head(select(df2, from_json(df2$people_json, 
schema_of_json(head(df2)$people_json))))}
     #' @note from_json since 2.2.0
    -setMethod("from_json", signature(x = "Column", schema = 
"characterOrstructType"),
    +setMethod("from_json", signature(x = "Column", schema = 
"characterOrstructTypeOrColumn"),
               function(x, schema, as.json.array = FALSE, ...) {
                 if (is.character(schema)) {
    -              schema <- structType(schema)
    +              jschema <- structType(schema)$jobj
    +            } else if (class(schema) == "structType") {
    +              jschema <- schema$jobj
    +            } else {
    +              jschema <- schema@jc
                 }
     
                 if (as.json.array) {
    -              jschema <- 
callJStatic("org.apache.spark.sql.types.DataTypes",
    -                                     "createArrayType",
    -                                     schema$jobj)
    -            } else {
    -              jschema <- schema$jobj
    +              # This case is R-specifically different. Unlike Scala and 
Python side,
    --- End diff --
    
    If so, the provided schema is wrapped by Array. The test cases are ...
    
    
    here 
https://github.com/apache/spark/pull/23184/files#diff-d4011863c8b176830365b2f224a84bf2R1707


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to