我正在尝试汇总一个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))
其中“值”和“体积”是数字(双精度)类型的列。
这两者都会导致相同的错误:
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数据帧一起使用),但我无法解决。
请问有人可以如何使它工作吗?
答案 0 :(得分: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
,它不会隐藏任何内置方法,并且会提供更有意义的错误:
错误(函数(类,fdef,mtable)): 无法为签名“字符”找到函数“ avg”的继承方法