“agg(x,...)出错:agg只能支持列或字符”错误

问题描述 投票:1回答:1

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

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

我也尝试了summarize()而不是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数据帧一起工作),但我无法弄清楚如何。

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

r apache-spark sparkr
1个回答
1
投票

SparkR没有character的意思实现 - 它只能采用列,所以你可以从警告信息中推断出,mean("Volume")调用被调度到base::mean并返回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,它不会遮蔽任何内置方法,并会提供更有意义的错误:

(函数(classes,fdef,mtable)中的错误:无法为签名'“character”'找到函数'avg'的继承方法

© www.soinside.com 2019 - 2024. All rights reserved.