4

我正在分析来自 Redshift 数据库的数据,使用每个 dplyr 的连接在 R 中工作 - 它有效:

my_db<-src_postgres(host='my-cluster-blahblah.redshift.amazonaws.com', port='5439', dbname='dev',user='me', password='mypw')
mytable <- tbl(my_db, "mytable")

viewstation<-mytable %>%
    filter(stationname=="something") 

当我尝试将该输出转换为数据框时,因此:

thisdata<-data.frame(viewstation)

我收到错误消息,警告消息:

Only first 100,000 results retrieved. Use n = -1 to retrieve all. 

我应该在哪里设置n?

4

2 回答 2

7

而不是使用

thisdata<-data.frame(viewstation)

利用

thisdata <- collect(viewstation)

collect() 会将数据库中的所有数据拉回 R 中。如 DPLYR::databases 小插图中所述:

在使用数据库时,dplyr 会尽可能地懒惰。它的懒惰有两种方式:

除非您明确要求,否则它永远不会将数据拉回 R。

它将任何工作延迟到最后一分钟,将您想做的所有事情收集在一起,然后一步将其发送到数据库。

于 2015-07-18T10:51:03.297 回答
0

对于那些仍在使用 dplyr 0.5 的人(比如我)。

参数ncollect函数的一部分。

my_db<-src_postgres(host='my-cluster-blahblah.redshift.amazonaws.com', port='5439', dbname='dev',user='me', password='mypw')
mytable <- tbl(my_db, "mytable") %>% collect(n = Inf)

这将使您获得超过 100.000 行

于 2017-06-20T15:28:22.997 回答