我有一个R数据框,我想将其转换为远程集群上的Spark数据框。我决定将我的数据帧写入中间csv文件,然后使用sparklyr::spark_read_csv()
读取。我这样做是因为数据框太大而无法直接使用sparklyr::sdf_copy_to()
发送(我认为是由于Livy的限制)。
我想以编程方式将数据框中使用的R列类型转换为新的spark数据框,方法是编写一个返回命名向量的函数,该向量可以与columns
中的spark_read_csv()
参数一起使用。
这是我现在能想到的唯一两种方式。
我只有将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)
}