Функция для преобразования типов R в типы Spark - PullRequest
0 голосов
/ 28 марта 2019

У меня есть фрейм данных R, который я хотел бы преобразовать в фрейм данных Spark на удаленном кластере. Я решил записать свой фрейм данных в промежуточный CSV-файл, который затем читается с использованием sparklyr::spark_read_csv(). Я делаю это, так как фрейм данных слишком велик для прямой отправки с использованием sparklyr::sdf_copy_to() (что, я думаю, связано с ограничением в Livy).

Я хотел бы программно перенести типы столбцов R, используемые в кадре данных, в новый кадр данных искры, написав функцию, которая возвращает именованный вектор, который я могу использовать с аргументом columns в spark_read_csv().

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

У меня есть только элементарные знания о сопоставлении типов данных 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)

}
0 голосов
/ 28 марта 2019
  1. Пожалуйста, пройдите проект Apache Arrow, он поддерживает преобразование нативных типов в типы искр.
  2. Создайте вектор текущих типов данных и сопоставьте его с искрой, используя приведение.

Это единственные два способа, о которых я могу думать прямо сейчас.

...