使用 collect 将 R 连接到 MySQL 时连接丢失
Connection lost when connect R to MySQL using collect
我想使用 dplyr
和 RMySQL
来处理我的大数据。 dplyr
代码没有问题。问题(我认为)是关于将数据从 MySQL
导出到 R
。每次我在 collect
中使用 n=Inf
时,我的连接都会断开。理论上,我的数据应该有超过 50K 行,但我只能得到大约 15K 行。任何建议表示赞赏。
方法一
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
.
复制相同的动作
正如这里所讨论的
https://github.com/tidyverse/dplyr/issues/1968,
https://github.com/tidyverse/dplyr/blob/addb214812f2f45f189ad2061c96ea7920e4db7f/NEWS.md and https://github.com/tidyverse/dplyr/commit/addb214812f2f45f189ad2061c96ea7920e4db7f这个软件包问题似乎已得到解决。
您使用的是什么版本的 dplyr 包?
在最近的 RMySQL 更新后,我注意到我无法从大视图中 collect()
数据,我将其报告为 an issue。您的问题可能与此相关。
可以尝试的一件事是回滚到上一个版本。
devtools::install_version("RMySQL", version = "0.10.9",
repos = "http://cran.us.r-project.org")
我想使用 dplyr
和 RMySQL
来处理我的大数据。 dplyr
代码没有问题。问题(我认为)是关于将数据从 MySQL
导出到 R
。每次我在 collect
中使用 n=Inf
时,我的连接都会断开。理论上,我的数据应该有超过 50K 行,但我只能得到大约 15K 行。任何建议表示赞赏。
方法一
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
.
正如这里所讨论的 https://github.com/tidyverse/dplyr/issues/1968, https://github.com/tidyverse/dplyr/blob/addb214812f2f45f189ad2061c96ea7920e4db7f/NEWS.md and https://github.com/tidyverse/dplyr/commit/addb214812f2f45f189ad2061c96ea7920e4db7f这个软件包问题似乎已得到解决。
您使用的是什么版本的 dplyr 包?
在最近的 RMySQL 更新后,我注意到我无法从大视图中 collect()
数据,我将其报告为 an issue。您的问题可能与此相关。
可以尝试的一件事是回滚到上一个版本。
devtools::install_version("RMySQL", version = "0.10.9",
repos = "http://cran.us.r-project.org")