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

Function to convert R types to Spark types

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

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

  1. 请查看 Apache Arrow 项目,它支持将本机类型转换为 spark 类型。
  2. 创建您当前数据类型的向量并使用转换将其映射到 spark。

目前我能想到的只有这两种方法。

我对将 R 数据类型(具体来说,由 class() 函数返回)映射到 Spark 数据类型只有基本的了解。但是,以下功能似乎按我的预期工作。希望其他人会找到它 useful/improve 它:

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)

}