gpt4 book ai didi

R - tbl/collect 有时很慢

转载 作者:行者123 更新时间:2023-12-05 06:25:33 30 4
gpt4 key购买 nike

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

但有时我的代码运行很慢,我不确定为什么。大多数时候,我连接到具有 100 万行的表,过滤一些数据,然后像这样使用收集函数

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 分钟。

唯一跑得快的就是

flights <- tbl(
getDbConn("flight_data"),
in_schema(
"flights",
"other_table")
) %>%
select(city, passanger_id, date)

上面的代码运行了几秒钟。但是一旦我对这些数据使用收集,它就会很慢——10 分钟或更长时间。我很好奇是否有任何快速的收集替代品?我试过 tbl_df 但它同样慢。

最佳答案

这是因为惰性求值。这部分只规划工作:

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()

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

flights %>% 
collect()

关于R - tbl/collect 有时很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56867727/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com