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