使用collect将R连接到MySQL时连接丢失

时间:2017-06-04 02:51:32

标签: mysql r dplyr rmysql

我想使用dplyrRMySQL来处理我的大数据。 dplyr代码没有问题。问题(我认为)是将数据从MySQL导出到R。即使我在n=Inf中使用collect,我的连接也会被删除。从理论上讲,我的数据应该有超过50K行,但我只能回到15K左右。任何建议都表示赞赏。

方法1

library(dplyr)
library(RMySQL)

# Connect to a database and select a table 
my_db <- src_mysql(dbname='aermod_1', host = "localhost", user = "root", password = "")   
my_tbl <- tbl(my_db, "db_table") 
out_summary_station_raw <- select(my_tbl, -c(X, Y, AVERAGE_CONC))
out_station_mean_local <- collect(out_summary_station_raw)

方法2:使用Pool

library(pool)
library(RMySQL)
library(dplyr)

pool <- dbPool(
  drv = RMySQL::MySQL(),
  dbname = "aermod_1",
  host = "localhost",
  username = "root",
  password = ""
)

out_summary_station_raw <- src_pool(pool) %>% tbl("aermod_final") %>% select(-c(X, Y, AVERAGE_CONC))

out_station_mean_local <- collect(out_summary_station_raw, n = Inf)

警告信息(两种方法):

Warning messages:
1: In dbFetch(res, n) : error while fetching rows
2: Only first 15,549 results retrieved. Use n = Inf to retrieve all. 

更新

检查日志,从服务器端看起来很好。对于我的示例,slow-log表示Query_time: 79.348351 Lock_time: 0.000000 Rows_sent: 15552 Rows_examined: 16449696,但collect无法检索完整数据。我可以使用MySQL Bench复制相同的动作。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

在最新的RMySQL更新后,我注意到我无法从大型视图中testList = modifier.sortMaterial(); 数据,并将其报告为an issue。您的问题可能是相关的。

要尝试的一件事是回滚到最后一个版本。

collect()