Изменение типа данных столбца на фактор с помощью sparklyr

Я новичок в Spark и в настоящее время использую его с помощью R API через пакет sparkly. Я создал фрейм данных Spark из запроса улья. Типы данных указаны неправильно в исходной таблице, и я пытаюсь сбросить тип данных, используя функции из пакета dplyr. Ниже приведен код, который я пробовал:

prod_dev <- sdf_load_table(...)
num_var <-  c("var1", "var2"....)
cat_var <-  c("var_a","var_b", ...)

pos1 <- which(colnames(prod_dev) %in% num_var)
pos2 <- which(colnames(prod_dev) %in% cat_var)

prod_model_tbl <- prod_dev %>% 
                mutate(age = 2016- as.numeric(substr(dob_yyyymmdd,1,4))) %>%
                mutate(msa_fg = ifelse(is.na(msacode2000), 0, 1)) %>% 
                mutate(csa_fg = ifelse(is.na(csacode), 0, 1)) %>%
                mutate_each(funs(factor), pos2) %>%
                mutate_each(funs(as.numeric), pos1)

Код будет работать, если prod_dev является фреймом данных R. Но использование его в кадре Spark Data, похоже, не дает правильного результата:

> head(prod_model_tbl)


    Source:   query [?? x 99]
    Database: spark connection master=yarn-client app=sparklyr_test local=FALSE

    Error: org.apache.spark.sql.AnalysisException: undefined function     FACTOR; line 97 pos 2248 at org.apache.spark.sql.hive.HiveFunctionRegistry....

Может кто-нибудь посоветовать, как внести желаемые изменения в фрейм данных Spark?


person b396958    schedule 21.12.2016    source источник


Ответы (1)


В общем, вы можете использовать стандартные универсальные функции R для приведения типов. Например:

df <- data.frame(x=c(1, NA), y=c("-1", "2"))

copy_to(sc, df, "df", overwrite=TRUE) %>% 
  mutate(x_char = as.character(x)) %>% 
  mutate(y_numeric = as.numeric(y))
Source:   query [2 x 4]
Database: spark connection master=...

      x     y x_char y_numeric
  <dbl> <chr>  <chr>     <dbl>
1     1    -1    1.0        -1
2   NaN     2   <NA>         2

Проблема в том, что Spark не предоставляет прямого эквивалента R factor.

В Spark SQL мы используем тип double и метаданные столбца для представления категориальных переменных и ML Transformers, которые не являются частью SQL, для кодирования. Поэтому нет места для factor/as.factor. SparkR обеспечивает некоторые автоматические преобразования при работе с ML, но я не уверен, есть ли аналогичный механизм в sparklyr (самое близкое, что я знаю, это ml_create_dummy_variables< /а>).

person zero323    schedule 31.12.2016