【问题标题】:Function to convert R types to Spark types将 R 类型转换为 Spark 类型的函数
【发布时间】:2019-08-18 19:47:06
【问题描述】:

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

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

【问题讨论】:

    标签: r apache-spark dplyr sparklyr livy


    【解决方案1】:
    1. 请通过 Apache Arrow 项目,它支持将原生类型转换为 spark 类型。
    2. 创建一个包含当前数据类型的向量并使用 cast 将其映射到 spark。

    这是我目前唯一能想到的两种方法。

    【讨论】:

    • 这看起来很有用,谢谢。 Arrow 是否适用于远程连接?
    【解决方案2】:

    我对将 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)
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2018-02-19
      相关资源
      最近更新 更多