首页 > 解决方案 > “agg(x, ...) 中的错误:agg 只能支持列或字符”错误

问题描述

我正在尝试聚合 SparkR 数据框以获取两个汇总变量,我尝试使用的代码是:

temp1_aggregate<- temp1 %>%
  groupBy("Week", "Store", "Brand", "Conversion_Factor", "Manufacturer", "Type") %>%
agg(Value=mean("Value"), Volume=mean("Volume"))

我也尝试过 summarise() 而不是 agg():

temp1_aggregate<- temp1 %>%
      groupBy("Week", "Store", "Brand", "Conversion_Factor", "Manufacturer", "Type") %>%
  SparkR::summarize(Value=mean("Value", na.rm=TRUE),Volume=mean("Volume", na.rm=TRUE))

其中 Value 和 Volume 是数字(双精度)类型的列。

这两者都会导致相同的错误:

Error in agg(x, ...) : agg can only support Column or character
In addition: Warning message:
In mean.default("Value", na.rm = TRUE) :
  argument is not numeric or logical: returning NA

我对此感到非常困惑,因为 Value 和 Volume 都是列并且都是数字(我检查过 - 虽然我不能共享数据,因为它是专有的)。

我认为这些错误是因为语法在某些方面不正确(我试图从 dplyr 转换为 SparkR,因为我需要让它与 spark 数据帧一起工作),但我不知道怎么做。

请任何人都可以建议如何让它工作?

标签: rapache-sparksparkr

解决方案


没有SparkR平均实现character- 它只能采用列,因此您可以从警告消息中推断出,mean("Volume")调用被调度base::mean并返回NA

要使其工作,您必须使用显式columns

agg(Value = mean(column("Value")), Volume = mean(column("Volume")))

您也可以替换meanavg SparkR::avg

agg(Value = avg(column("Value")), Volume = avg(column("Volume")))

如果您通过 plain ,它不会遮蔽任何内置方法,并且会提供更有意义的错误character

(函数(类,fdef,mtable)中的错误:无法找到签名“字符”的函数“avg”的继承方法</p>


推荐阅读