首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用spark_apply()来使用combn()生成组合

如何使用spark_apply()来使用combn()生成组合
EN

Stack Overflow用户
提问于 2017-08-07 15:33:41
回答 1查看 1.6K关注 0票数 1

我想使用spark来为一个相对较大的输入列表(200ISH)和不同的m值(2-5)生成m函数的输出,但是我在spark_apply()中也遇到了问题。

我目前的方法(基于此)的一个mwe:

代码语言:javascript
复制
names_df <- data.frame(name = c("Alice", "Bob", "Cat"), 
                   types = c("Human", "Human", "Animal"))

combn(names_df$name, 2)

name_tbl <- sdf_copy_to(sc = sc,
                        x = names_df,
                        name = "name_table")

name_tbl %>%
  select(name) %>%
  spark_apply(function(e) combn(e, 2))

错误消息输出很大,但是我很难理解如何使用这些信息来改进我的方法。

我期望得到一个输出,比如MWE的第二行。combn()所期望的“向量源”问题不是select()提供的吗?还是select不返回“一个对象(通常是spark_tbl)可以强制发送给火花DataFrame"?无论哪种方法,我是否可以使用一种方法来达到预期的结果?

我也尝试过这样做,但没有成功:

代码语言:javascript
复制
name_tbl %>%
  select(name) %>% # removing this also doesn't work
  spark_apply(function(e) combn(e$name, 2))

编辑:所以expand.grid工作得很好,这表明combn的返回不能强制进入data.frame存在一些问题。

工作expand.grid

代码语言:javascript
复制
name_tbl %>%
  spark_apply(function(e) expand.grid(e))

编辑2:

在更仔细地阅读了文档之后,我现在还试着将函数强制转换为data.frame,如下所示:

您的R函数应该设计为在R数据帧上操作。传递给spark_apply的R函数需要一个DataFrame,并将返回一个可以转换为DataFrame的对象。

然而,以下方面也不成功:

代码语言:javascript
复制
name_tbl %>%
  spark_apply(function(e) data.frame(combn(e$name, 2)))

name_tbl %>%
  select(name) %>%
  spark_apply(function(e) data.frame(combn(e, 2)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 00:10:32

问题似乎是combn()不能正确地处理因素,代码还需要命名列,如下所示:

代码语言:javascript
复制
name_tbl %>%
  spark_apply(
    function(e) data.frame(combn(as.character(e$name), 2)),
    names = c("1", "2", "3")
  )

# Source:   table<sparklyr_tmp_626bc0dd927> [?? x 3]
# Database: spark_connection
    `1`   `2`   `3`
  <chr> <chr> <chr>
1 Alice Alice   Bob
2   Bob   Cat   Cat
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45550701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档