Как распространять данные tbl_dbi и tbl_sql без загрузки в локальную память - PullRequest
0 голосов
/ 23 февраля 2019

Я работаю с большими наборами данных, и тидир spread обычно выдает мне сообщения об ошибках, предлагающие failure to obtain memory для выполнения операции.

Поэтому я изучаю dbplyr .Однако, как говорится здесь , а также показано ниже, dbplyr::spread() не работает.

Мой вопрос здесь заключается в том, есть ли другой способ добиться того, что tidyr::spread делает при работе сtbl_dbi и tbl_sql данные без загрузки в локальную память.

Используя примеры данных из здесь , ниже я представляю, что я получу и что я хотел бы сделать и получить.

# образец данных tbl_dbi и tbl_sql

df_sample <- tribble(~group1, ~group2, ~group3, ~identifier, ~value, 
                      8, 24, 6, 'mt_0', 
                      12, 18, 24, 6, 'mt_1', 4)

con <- DBI::dbConnect(RSQLite::SQLite(), "")
df_db <- copy_to(con, df_sample, 'df_sample')

# при попытке распространения tbl_dbi и tbl_sql без загрузки в локальную память

//this does not work

df_db %>% spread(identifier, value)

Error in UseMethod("spread_") : 
  no applicable method for 'spread_' applied to an object of class "c('tbl_dbi', 'tbl_sql', 'tbl_lazy', 'tbl')"

# при попытке распространения tbl_dbi и tbl_sql после загрузкив локальную память

//this spreads the data but the output is in memory
//I would like to keep the output as 'tbl_dbi', 'tbl_sql', and 'tbl_lazy'

df_db %<>% collect() %>% spread(identifier, value)

class(df_db)
[1] "tbl_df"     "tbl"        "data.frame"

Заранее благодарен за любую помощь

...