代码之家  ›  专栏  ›  技术社区  ›  user1828605

如何使用SparkyR在dataframe中添加列?

  •  1
  • user1828605  · 技术社区  · 4 年前

    我必须变异基因 dataframe 并根据某个单词添加列 Health 在专栏里。这段代码在我运行时运行良好 R 具有 dplyr ,但当我使用Sparkyr时,它不会运行。这是我第一次使用 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")
    

    但这行不通,因为没有一个词 健康 在数据库中。它总是和一些其他多个词混合在一起。

    0 回复  |  直到 4 年前
        1
  •  1
  •   10465355 user11020637    4 年前

    这里有两个不相关的问题:

    • 变异原语,比如 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 不是 translated 转换为SQL原语。 Instead you should use 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"))