【问题标题】:How to add column in dataframe using sparklyr?如何使用 sparklyr 在数据框中添加列?
【发布时间】:2020-06-10 21:10:06
【问题描述】:

我必须改变 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。它总是与其他一些多个词混合在一起。

【问题讨论】:

    标签: r apache-spark dplyr sparklyr


    【解决方案1】:

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

    • 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 原语中的 translatedInstead 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"))
    

    【讨论】:

    • 谢谢您.. 在instead you should use grepl 中您的意思是喜欢吗? rlike 是一个包还是 sparklyr 附带的东西?我记得尝试过,但我收到的错误消息与unknown function rlike 有关
    • 您在此处使用的任何函数都不是 R 对象。将名称翻译(如果可能)为基础 SQL 方言。您需要的语法完全如图所示。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2019-08-12
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多