如何配置未来以下载更多文件?
How can I configure future to download more files?
我有很多文件需要下载。
我正在使用 download.file()
函数和 furrr::map
并行下载,plan(strategy = "multicore")
。
请告知如何为每个未来加载更多工作?
运行 在 Ubuntu 18.04 上有 8 个核心。
R 版本 3.5.3.
文件可以是 txt、zip 或任何其他格式。
每个大小在 5MB - 40MB 之间变化。
使用 furrr 效果很好。我想你的意思是furrr::future_map
。使用multicore
大大提高了下载速度(注意:在Windows,multicore
不可用,只有multisession
。使用multiprocess
如果您不确定您的代码将 运行 在哪个平台上。
library(furrr)
#> Loading required package: future
csv_file <- "https://raw.githubusercontent.com/UofTCoders/rcourse/master/data/iris.csv"
download_template <- function(.x) {
temp_file <- tempfile(pattern = paste0("dl-", .x, "-"), fileext = ".csv")
download.file(url = csv_file, destfile = temp_file)
}
download_normal <- function() {
for (i in 1:5) {
download_template(i)
}
}
download_future_core <- function() {
plan(multicore)
future_map(1:5, download_template)
}
download_future_session <- function() {
plan(multisession)
future_map(1:5, download_template)
}
library(microbenchmark)
microbenchmark(
download_normal(),
download_future_core(),
download_future_session(),
times = 3
)
#> Unit: milliseconds
#> expr min lq mean median
#> download_normal() 931.2587 935.0187 937.2114 938.7787
#> download_future_core() 433.0860 435.1674 488.5806 437.2489
#> download_future_session() 1894.1569 1903.4256 1919.1105 1912.6942
#> uq max neval
#> 940.1877 941.5968 3
#> 516.3279 595.4069 3
#> 1931.5873 1950.4803 3
由 reprex package (v0.2.1)
于 2019-03-25 创建
请记住,我正在使用 Ubuntu,因此使用 Windows 可能会改变一些事情,因为据我所知,未来不允许在 Windows 上使用多核。
我只是在猜测,但 multisession
较慢的原因可能是因为它必须在 运行 启用 download.file
函数之前打开几个 R 会话。我只是下载了一个非常小的数据集 (iris.csv
),所以也许在需要更多时间的较大数据集上,打开 R 会话所花费的时间将被下载较大文件所花费的时间所抵消。
次要更新:
您可以将指向数据集的 URL 向量传递到 future_map
,以便它下载由未来的包处理确定的每个文件:
data_urls <- c("https:.../data.csv", "https:.../data2.csv")
library(furrr)
plan(multiprocess)
future_map(data_urls, download.file)
# Or use walk
# future_walk(data_urls, download.file)
我有很多文件需要下载。
我正在使用 download.file()
函数和 furrr::map
并行下载,plan(strategy = "multicore")
。
请告知如何为每个未来加载更多工作?
运行 在 Ubuntu 18.04 上有 8 个核心。 R 版本 3.5.3.
文件可以是 txt、zip 或任何其他格式。 每个大小在 5MB - 40MB 之间变化。
使用 furrr 效果很好。我想你的意思是furrr::future_map
。使用multicore
大大提高了下载速度(注意:在Windows,multicore
不可用,只有multisession
。使用multiprocess
如果您不确定您的代码将 运行 在哪个平台上。
library(furrr)
#> Loading required package: future
csv_file <- "https://raw.githubusercontent.com/UofTCoders/rcourse/master/data/iris.csv"
download_template <- function(.x) {
temp_file <- tempfile(pattern = paste0("dl-", .x, "-"), fileext = ".csv")
download.file(url = csv_file, destfile = temp_file)
}
download_normal <- function() {
for (i in 1:5) {
download_template(i)
}
}
download_future_core <- function() {
plan(multicore)
future_map(1:5, download_template)
}
download_future_session <- function() {
plan(multisession)
future_map(1:5, download_template)
}
library(microbenchmark)
microbenchmark(
download_normal(),
download_future_core(),
download_future_session(),
times = 3
)
#> Unit: milliseconds
#> expr min lq mean median
#> download_normal() 931.2587 935.0187 937.2114 938.7787
#> download_future_core() 433.0860 435.1674 488.5806 437.2489
#> download_future_session() 1894.1569 1903.4256 1919.1105 1912.6942
#> uq max neval
#> 940.1877 941.5968 3
#> 516.3279 595.4069 3
#> 1931.5873 1950.4803 3
由 reprex package (v0.2.1)
于 2019-03-25 创建请记住,我正在使用 Ubuntu,因此使用 Windows 可能会改变一些事情,因为据我所知,未来不允许在 Windows 上使用多核。
我只是在猜测,但 multisession
较慢的原因可能是因为它必须在 运行 启用 download.file
函数之前打开几个 R 会话。我只是下载了一个非常小的数据集 (iris.csv
),所以也许在需要更多时间的较大数据集上,打开 R 会话所花费的时间将被下载较大文件所花费的时间所抵消。
次要更新:
您可以将指向数据集的 URL 向量传递到 future_map
,以便它下载由未来的包处理确定的每个文件:
data_urls <- c("https:.../data.csv", "https:.../data2.csv")
library(furrr)
plan(multiprocess)
future_map(data_urls, download.file)
# Or use walk
# future_walk(data_urls, download.file)