我想使用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)))