R-tbl / collect有时很慢

时间:2019-07-03 10:09:37

标签: r dataframe dplyr collect tbl

我使用dplyr从sql数据库获取数据,它通常工作得很好。

但是有时候我的代码运行速度很慢,我不确定为什么。在大多数情况下,我连接到具有100万行的表时,我会过滤一些数据,然后使用像这样的collect函数

ERROR:  b'142 <172>1 2019-07-03T10:06:07+00:00 host heroku logplex - Error L10 (output buffer overflow): 6 messages dropped since 2019-07-03T09:43:52+00:00.595 <158>1 2019-07-03T10:06:07.509894+00:00 host heroku router - at=info ...

从数据库加载数据仅需几秒钟。但是有时候我的代码很慢,我也不知道为什么。它可能与存储在数据库中的数据类型有关,例如持续时间。在这种情况下,使用与上面相同的代码加载数据需要10分钟。

只有运行得总是快的东西

flights <- tbl(
  getDbConn("flight_data"),
  in_schema(
    "flights",
    "usa")
  ) %>% 
  filter(destination == "east_coast") %>% 
  filter(city %in% c("NYC", "MIA") == F) %>% 
  filter(passanger_id %in% passangers$id) %>%
  select(city, passanger_id, date) %>%
  collect()

上面的代码运行几秒钟。但是,一旦我使用此数据收集功能,它就会很慢-10分钟或更长时间。我很好奇,有没有其他快速的收集方法?我尝试了tbl_df,但是模拟速度很慢。

1 个答案:

答案 0 :(得分:0)

这是由于懒惰的评估。 这部分仅计划工作:

flights <- tbl(
  getDbConn("flight_data"),
  in_schema(
    "flights",
    "usa")
  ) %>% 
  filter(destination == "east_coast",
         city %in% c("NYC", "MIA"), 
         passanger_id %in% passangers$id) %>%
  select(city, passanger_id, date)

您可以看到您实际创建的查询:

flights %>% 
  show_query()

仅当您运行收集时,才会执行查询并传输数据:

flights %>% 
  collect()