如何使用 sparklyr 在数据框中添加列?

How to add column in dataframe using sparklyr?

我必须改变 dataframe 并根据列中的某个词 Health 添加列。这段代码 运行 当我 运行 它在 Rdplyr 中时很好,但是当我使用 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。它总是与其他一些多个词混合在一起。

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

  • 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 不是 into SQL primitive.

合并

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"))