我如何使用 spark_apply() 来生成使用 combn() 的组合
How can I use spark_apply() to generate combinations using combn()
我想使用 spark 为相对较大的输入列表(200 左右)生成 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()
期待的 "vector source" 不是我 select()
提供的问题吗?还是 select 不是 returning "An object (usually a spark_tbl) coercable to a Spark DataFrame"?无论哪种方式,有没有一种方法可以用来达到我想要的结果?
我也试过这个,但没有成功:
name_tbl %>%
select(name) %>% # removing this also doesn't work
spark_apply(function(e) combn(e$name, 2))
编辑:所以 expand.grid
工作正常,这对我来说表明 combn
的 return 无法被强制转换为 data.frame.
工作expand.grid
:
name_tbl %>%
spark_apply(function(e) expand.grid(e))
编辑 2:
仔细阅读文档后,我现在还尝试将函数强制转换为 data.frame,正如它所说:
Your R function should be designed to operate on an R data frame. The R function passed to spark_apply expects a DataFrame and will return an object that can be cast as a 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)))
问题似乎是 combn()
不能与因子一起正常工作,代码还需要命名列,如:
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
我想使用 spark 为相对较大的输入列表(200 左右)生成 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()
期待的 "vector source" 不是我 select()
提供的问题吗?还是 select 不是 returning "An object (usually a spark_tbl) coercable to a Spark DataFrame"?无论哪种方式,有没有一种方法可以用来达到我想要的结果?
我也试过这个,但没有成功:
name_tbl %>%
select(name) %>% # removing this also doesn't work
spark_apply(function(e) combn(e$name, 2))
编辑:所以 expand.grid
工作正常,这对我来说表明 combn
的 return 无法被强制转换为 data.frame.
工作expand.grid
:
name_tbl %>%
spark_apply(function(e) expand.grid(e))
编辑 2:
仔细阅读文档后,我现在还尝试将函数强制转换为 data.frame,正如它所说:
Your R function should be designed to operate on an R data frame. The R function passed to spark_apply expects a DataFrame and will return an object that can be cast as a 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)))
问题似乎是 combn()
不能与因子一起正常工作,代码还需要命名列,如:
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