将R类型转换为Spark类型的函数

时间:2019-03-28 05:39:44

标签: r apache-spark dplyr sparklyr livy

我有一个R数据帧,我想将其转换为远程集群上的Spark数据帧。我决定将数据帧写入一个中间的csv文件,然后使用sparklyr::spark_read_csv()进行读取。我这样做是因为数据帧太大,无法直接使用sparklyr::sdf_copy_to()发送(我认为这是由于Livy的限制)。

我想通过编写返回可与columns中的spark_read_csv()参数一起使用的命名向量的函数,将数据框中使用的R列类型以编程方式传输到新的spark数据框中。 。

2 个答案:

答案 0 :(得分:0)

  1. 请完成Apache Arrow项目,该项目支持将本机类型转换为Spark类型。
  2. 创建一个包含您当前数据类型的向量,并使用强制转换将其映射到spark。

这些是我现在能想到的仅有的两种方法。

答案 1 :(得分:0)

我仅具有将R数据类型(特别是由class()函数返回)映射到Spark数据类型的基本知识。但是,以下功能似乎可以正常工作。希望其他人会发现它有用/改善它:

get_spark_data_types_from_data_frame_types <- function(df) {



    r_types <-
        c("logical", "numeric", "integer", "character", "list", "factor")

    spark_types <-
        c("boolean", "double", "integer", "string", "array", "string")

    types_in <- sapply(df, class)    


    types_out <- spark_types[match(types_in, r_types)]

    types_out[is.na(types_out)] <- "string" # initialise to character by default

    names(types_out) <- names(df)

    return(types_out)

}