如何在不下载到本地内存的情况下传播tbl_dbi和tbl_sql数据

时间:2019-02-23 05:00:18

标签: r sqlite tidyr r-dbi dbplyr

我正在处理大型数据集,tidyr的spread通常会给我错误消息,建议failure to obtain memory执行该操作。

因此,我一直在探索dbplyr。但是,正如here所示(如下所示),dbplyr::spread()不起作用。

我的问题是,在使用tidyr::spreadtbl_dbi数据时,是否有另一种方法可以完成tbl_sql的工作而无需下载到本地内存。

使用下面的here中的示例数据,我将介绍我得到的以及我想做的和得到的。

#sample 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"

在此先感谢您的帮助

0 个答案:

没有答案