我正在尝试聚合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数据帧一起工作),但我无法弄清楚如何。
请任何人都可以建议如何让它工作?
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'的继承方法