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

问题描述 投票:0回答:2

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

我想以编程方式将数据框中使用的R列类型转换为新的spark数据框,方法是编写一个返回命名向量的函数,该向量可以与columns中的spark_read_csv()参数一起使用。

r apache-spark dplyr sparklyr livy
2个回答
0
投票
  1. 请浏览Apache Arrow项目,它支持将本机类型转换为spark类型。
  2. 创建当前数据类型的向量,并使用强制转换将其映射到spark。

这是我现在能想到的唯一两种方式。


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)

}
© www.soinside.com 2019 - 2024. All rights reserved.