Как добавить столбец в dataframe, используя sparklyr? - PullRequest
0 голосов
/ 27 февраля 2020

Мне нужно изменить dataframe и добавить столбец на основе определенного слова Health в столбце. Этот код работает нормально, когда я запускаю его в R с dplyr, но он не запускается, когда я использую sparklyr. Это первый раз, когда я использую sparklyr. Как я могу это исправить?

bmk_tbl %>% add_column(healthcare = case_when(
                                          grepl("Health", .$OrganizationType) ~ 1, 
                                          TRUE ~ 0), .after = "OrganizationType")

Я получаю следующую ошибку, и я не знаю, как ее исправить

Error in if (nrow(df) != nrow(.data)) { : missing value where TRUE/FALSE needed

Я не уверен, что попробовать, поэтому я попытался сделать что-то вроде этого:

bmk_tbl %>% add_column(healthcare = case_when(
                                          (.$OrganizationType %in% c("Health") ~ 1), 
                                          TRUE ~ 0), .after = "OrganizationType")

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

1 Ответ

1 голос
/ 07 марта 2020

У вас есть две несвязанные проблемы:

  • Мутирующие примитивы, такие как add_column, применимы только к data.frames, и tbl_spark не является единицей. Это объясняет следующую ошибку:

    Error in if (nrow(df) != nrow(.data)) { : missing value where TRUE/FALSE needed
    

    На самом деле вы также должны увидеть сопровождающее предупреждение при первом вызове

    In addition: Warning message:
    `.data` must be a data frame in `add_column()`.
    

    Правильная функция для использования здесь - mutate.

  • grepl не переведено в SQL примитив. Вместо этого вы должны использовать grepl

Комбинированный

data <- copy_to(sc, iris, overwrite=TRUE)

data %>% 
  mutate(match = case_when(
    Species %rlike% "tos" ~ 1,
    TRUE ~ 0
  ))

или просто

data %>%
    mutate(match = as.numeric(Species %rlike% "tos"))
...