Скажем, есть список кадров данных, который генерируется после вызова lapply
для некоторого вектора, и цель состоит в том, чтобы добавить список кадров данных друг к другу, чтобы сформировать один кадр данных. В R одним из подходов является do.call(rbind, data.ls)
, где data.ls
— это объект списка, состоящий из списка фреймов данных. Этот подход также работает с bind_rows
dplyr
точно так же, но он НЕ работает с одноименным union_all
SQL, когда один связывает более двух фреймов данных. В большинстве случаев это нормально, но что делать, когда вы работаете в среде базы данных, и ваши данные слишком тяжелы для collect
до конца вызова lapply
(и нужно добавить более двух фреймов данных)? Это явление также не уникально для dbplyr
. Авторы пакета sparklyr
осознали ограничения пакета union_all
и реализовали глагол sparklyr
, выполняющий то, что rbind
/bind_rows
делает в локальной среде -sdf_bind_rows
. Мне любопытно, есть ли аналогичный глагол dplyr
/dbplyr
для выполнения или какой-либо другой подход, который может выполнить это, который все еще зависит от результатов вызова lapply
-т.е. список фреймов данных.
Из документации sparklyr
:
Описание
sdf_bind_rows() и sdf_bind_cols() являются реализацией общего шаблона do.call(rbind, sdfs) или do.call(cbind, sdfs) для связывания множества фреймов данных Spark в один.
x
- это ваш список фреймов данных, может быть что-то вродеpurrr::reduce(x, union_all)
? - person Bas   schedule 27.02.2020