r - “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 数据帧一起工作),但我不知道怎么做。
请任何人都可以建议如何让它工作?
解决方案
没有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")))
如果您通过 plain ,它不会遮蔽任何内置方法,并且会提供更有意义的错误character
:
(函数(类,fdef,mtable)中的错误:无法找到签名“字符”的函数“avg”的继承方法</p>
推荐阅读
- reactjs - 如何使用 CreateStackNavigator 在 React Native 中将 StatusBar 设置为某种背景颜色,并将 Header 背景颜色设置为另一种?
- javascript - 确定css线性渐变中的光源
- javascript - JS检测图片元素src变化并加载
- sugarcrm - 模块框架与扩展框架(sugarCRM、SuiteCRM)
- c++ - 如何在构造函数参数中初始化`std::set`?
- node.js - 无法解决 Node.js 应用程序中的承诺和更新数据
- angular - 为什么 req 对象中缺少我的用户对象?
- nativescript - NativeScript Publishing with SideKick iOS 错误(隐私策略 URL)
- android - 如何使用 android 和 docker build 支持为 jenkins 构建 docker 镜像
- html - 将视口高度划分为两个具有可调节边框的 div