Ошибка «agg (x, ...): agg может поддерживать только столбец или символ» - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь агрегировать массив данных SparkR, чтобы получить две сводные переменные, код, который я пытаюсь использовать:

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

Я также попытался summaze () вместо 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, поскольку мне нужно заставить его работать с искровыми фреймами данных), но я не могу понять, как это сделать.

Пожалуйста, кто-нибудь может посоветовать, как заставить это работать?

1 Ответ

1 голос
/ 02 апреля 2019

Не существует 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:

Ошибка в (function (classes, fdef, mtable): невозможно найти унаследованный метод для функции 'avg' для подписи '' символ ''

...