SparkR:如何在总结中使用列表

SparkR : How to use a list in summarize

我正在尝试使用一个包含 Spark DataFrame 的所有列和函数 last() 的列表,并将该列表放入分组 DF 的 summarize() 中。

列表是这样创建的:

    exprs <- lapply(columns(WORK02), function(x) last(x) %>% alias(x))

然后我试着做这样的东西:

WORK03 <- WORK02 %>% 
  groupBy(column("AGENZIA")) %>%
  summarize(exprs)

我收到以下错误:

Error in agg(x, ...) : agg can only support Column or character

如果我在每个示例中仅使用该列表中的一个元素,它会起作用:

WORK03 <- WORK02 %>% 
  groupBy(column("AGENZIA")) %>%
  summarize(exprs[[1]])

输出:

 AGENZIA SERV
       1    3

但我希望收到的结果是:

 AGENZIA SERV COLUMN_1 COLUMN_2 COLUMN_3 ..  COLUMN_N
       1    3       V1       V2       V3           VN 

有办法做到这一点吗?

P.S。问题是我可以使用有限的库包,只有 SparkR...

我找到的解决方案如下:

为了创建我正在尝试的列列表 select 我使用了函数 lapply()

exprs <- lapply(columns(WORK02), function(x) last(x) %>% alias(x)) 

在那之后,我从列表中删除了所有空值,(这个选项是为了防止有人不想 select 特定列,否则列将被创建为 NULL ,这会给之后给我们一个错误)。

exprs <- exprs[!sapply(exprs,is.null)]

最后我用函数 do.call() 执行 groupBy() + summarize() 在以下模式中:

WORK_TEST1 <- WORK02 %>% 
  groupBy(column("AGENZIA"))

WORK03 <- do.call(summarize,c(WORK_TEST1,exprs))      

通过这次迭代,我收到了我期待的结果:

 AGENZIA SERV COLUMN_1 COLUMN_2 COLUMN_3 ..  COLUMN_N
       1    3       V1       V2       V3           VN