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

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

我正在尝试聚合 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

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

我假设这些错误是因为语法在某种程度上不正确(我试图从 dplyr 转换为 SparkR,因为我需要让它与 spark 数据帧一起工作),但我无法弄清楚如何。

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

character 没有 SparkR 均值实现 - 它只能采用列,因此您可以从警告消息中推断出,mean("Volume") 调用被分派到 base::mean 和 returns NA.

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

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

您也可以将 mean 替换为 avg SparkR::avg

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

它不会隐藏任何内置方法,并且会提供更有意义的错误,如果你通过普通 character:

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘avg’ for signature ‘"character"’