如何使用R和dplyr从Redshift中检索超过100000行

时间:2015-07-17 23:28:27

标签: r dplyr amazon-redshift rpostgresql

我正在分析来自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?

2 个答案:

答案 0 :(得分:7)

而不是使用

thisdata<-data.frame(viewstation)

使用

thisdata <- collect(viewstation)

collect()会将数据库中的所有数据拉回R.如DPLYR :: databases中所提到的:

  

使用数据库时,dplyr会尽可能地懒惰。它在两个方面很懒惰:

     

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

     

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

答案 1 :(得分: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行