dplyr/dbplyr: таблица sql против скорости df

В настоящее время я пишу функцию с dplyr для выполнения расчетов. Функция оказывается очень медленной при вводе объекта tbl_sql, но достаточно быстрой при вводе data.frame.

Пример,

df = data.frame(
  a = rnorm(1000000),
  b = rnorm(1000000),
  c = rep(1:5, 2000000),
  d = rep(1:10, 1000000)
)
library(dplyr)
library(MonetDBLite)
library(DBI)
mydb = dbConnect(MonetDBLite())
dbWriteTable(mydb, "df", df, overwrite = T)
dfdb = tbl(mydb, "df")

f = function(d, loc = F){
  d = d %>% mutate(i = a*b, ii = a/b)
  d2 = d %>% group_by(d) %>% summarise(sum(i)) %>% rename(k = d)
  d3 =  d %>% group_by(c) %>% summarise(sum(ii)) %>% rename(k = c)
  d4 = inner_join(d2, d3, by = "k")
  print(d4)
}

system.time(f(df)) занимает менее 1 секунды. (data.frame)

system.time(f(dfdb)) это займет около 2 секунд. (tbl_sql)

Моя текущая функция длиннее, а введенные данные также больше (data.frame) оказывается более чем в 10 раз быстрее, чем (tbl_sql) объектов.

Это почему? Может кто-нибудь, пожалуйста, объясните.

0 ответов

Другие вопросы по тегам