如何使用spark_apply()使用combn()

时间:2017-08-07 15:33:41

标签: r apache-spark apply sparklyr

我想使用spark为相对较大的输入列表(200 ish)生成combn()函数的输出,并为m(2-5)生成不同的值,但是我在spark_apply()中遇到此问题时遇到了麻烦。

我当前的方法(based on this):

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()期待&#34;矢量源&#34;这不是我select()提供的内容?或者是选择不返回&#34;一个对象(通常是spark_tbl)可以强制解决Spark DataFrame&#34;?无论哪种方式,有没有一种方法可以用来达到预期的效果?

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

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

name_tbl %>%
  spark_apply(function(e) expand.grid(e))

编辑2:

如果仔细阅读文档,我现在也尝试将函数强制转换为data.frame,如下所示:

  

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

但是,以下内容也不成功:

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

0 个答案:

没有答案