【发布时间】:2025-12-15 00:05:02
【问题描述】:
我想使用 spark 为相对较大的输入列表(200 ish)生成 combn() 函数的输出,以及 m (2-5) 的不同值,但是我遇到了麻烦包括在spark_apply()中。
我目前的方法的一个 mwe (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 DataFrame 的对象(通常是 spark_tbl)”?无论哪种方式,有没有一种方法可以让我达到预期的效果?
我也试过这个,但没有成功:
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 来应用它的例子,我会很感兴趣
标签: r apache-spark apply sparklyr