我想用spark来产生combn()
函数的输出,用于一个相对较大的输入列表(200 ish)和变化的值m
( 2-5),但是我遇到了麻烦,包括spark_apply()
。我怎样才能使用spark_apply()来产生组合使用combn()
我目前的做法(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()
期待的“矢量源”,这不是我所提供的select()
?还是说select没有返回“一个对象(通常是Spark_tbl)可以被Spark DataFrame强制”?无论哪种方式,有没有一种方法可以用来实现所需的结果?
我也曾在没有成功的尝试尝试这样做:
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)))
我刚刚找到了'expand.grid()'函数。在这种特殊情况下,我认为我不需要它,但我希望我会为下一部分工作做好准备。我会感兴趣的是,如果有一个使用spark来应用的例子,如果可能的话 – DaveRGP