Допустим, я хочу, чтобы выполнить что-то выглядит следующим образом:SparkR gapply - функция возвращает многорядные R dataframe
library(SparkR)
...
df = spark.read.parquet(<some_address>)
df.gapply(
df,
df$column1,
function(key, x) {
return(data.frame(x, newcol1=f1(x), newcol2=f2(x))
}
)
где возвращение функции имеет несколько строк. Чтобы быть ясным, примеры в документации (которые, к сожалению, вторят большей части документации Spark, где примеры тривиально просты) не помогают мне определить, будет ли это обрабатываться, как я ожидаю.
Я ожидал бы, что результатом этого было бы для групп k, созданных в DataFrame с выходными строками n_k для каждой группы, что результат вызова gapply() имел бы сумму (1..k, n_k) строк , где ключевое значение реплицируется для каждой из строк n_k для каждой группы в ключе k ... Однако поле схемы подсказывает мне, что это не так, как это будет обрабатываться - на самом деле это предполагает, что он либо захочет результат вставляется в одну строку.
Надеюсь, это ясно, хотя и теоретическое (извините, что я не могу поделиться своим примером с фактическим кодом). Может ли кто-нибудь проверить или объяснить, как эта функция будет фактически рассматриваться?
, так что в правилах проводки я, конечно же, уже прочитал документацию, и ясность документа является глазом наблюдателя (мне не совсем ясно, что разрешен многострочный фрейм данных, и нет примера, показывающего его). преобразование идентичности было бы очевидным примером, поэтому, если это работает, это должно быть в документации - и это не так. ваша вторая примерная функция вернет только одну строку, так как вы группируетесь по видам снаружи, а затем снова по внутренней части, что означает, что инсайдер dpylr :: group_by является избыточным ... так что это не обязательно проиллюстрирует его. –
Второй пример - просто показать, что количество строк может отличаться от количества строк на входе. На практике вы думаете о 'gapply' как эквиваленте' dplyr :: group_by%>% dplyr :: summaryize или 'split%>% lapply' – zero323
, тем не менее, я запустил идентификатор и несколько других примеров и подтвердил для себя что возвращает многострочный кадр данных.таким образом, принимая этот ответ, несмотря на предостережения о документации в SparkR. –