【问题标题】:"Error in agg(x, ...) : agg can only support Column or character" error“agg(x, ...) 中的错误:agg 只能支持列或字符”错误
【发布时间】:2019-08-23 17:07:03
【问题描述】:

我正在尝试聚合 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 数据帧一起使用),但我不知道如何解决。

请任何人提供有关如何使其工作的建议?

【问题讨论】:

    标签: r apache-spark sparkr


    【解决方案1】:

    SparkR 没有 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”的继承方法

    【讨论】:

      猜你喜欢
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 2012-02-11
      • 2020-12-12
      • 2013-02-25
      • 2021-02-07
      • 1970-01-01
      相关资源
      最近更新 更多