R: 如何使用包 Rcrawler 进行并行解析 JSON?
R: How can I use the package Rcrawler to do JSON parsing in parallel?
我刚刚遇到这个功能强大的 R 包,但遗憾的是还没有找到如何并行解析响应位于 JSON.
中的 url 列表
作为一个简单的例子,假设我有一个城市列表(在瑞士):
list_cities <- c("Winterthur", "Bern", "Basel", "Lausanne", "Lugano")
下一步,我想为每个列出的城市找到 public 到苏黎世市的交通连接。我可以使用以下传输 api 来查询 public 时间表数据:
https://transport.opendata.ch
使用httr包,我可以对每个城市进行如下请求:
for (city in list_cities) {
r <- GET(paste0("http://transport.opendata.ch/v1/connections?from=", city, "&to=Zurich&limit=1&fields[]=connections/duration"))
cont <- content(r, as = "parsed", type = "application/json", encoding = "UTF-8")
}
获取个人旅程的持续时间。但是,我有一个更长的列表和更多的目的地。这就是为什么我正在寻找一种方法来并行发出多个请求。
请注意,我没有对此进行测试 - 但首先,您需要初始化您的并行工作器
library(parallel)
cl <- makeCluster(detectCores() - 1)
clusterEvalQ(cl, { library(Rcrawler) }) # load required packages onto each parallel worker
使用您的相关命令创建函数
custom_parse_json <- function(city) {
r <- GET(paste0("http://transport.opendata.ch/v1/connections?from=", city, "&to=Zurich&limit=1&fields[]=connections/duration"))
cont <- content(r, as = "parsed", type = "application/json", encoding = "UTF-8")
return(cont)
}
将函数导出到每个并行工作
clusterExport(cl, c("custom_parse_json"))
遍历城市列表
parLapply(cl, list_cities, function(i) custom_parse_json(i))
这应该 return 您的 JSON 内容列表。
我刚刚遇到这个功能强大的 R 包,但遗憾的是还没有找到如何并行解析响应位于 JSON.
中的 url 列表作为一个简单的例子,假设我有一个城市列表(在瑞士):
list_cities <- c("Winterthur", "Bern", "Basel", "Lausanne", "Lugano")
下一步,我想为每个列出的城市找到 public 到苏黎世市的交通连接。我可以使用以下传输 api 来查询 public 时间表数据:
https://transport.opendata.ch
使用httr包,我可以对每个城市进行如下请求:
for (city in list_cities) {
r <- GET(paste0("http://transport.opendata.ch/v1/connections?from=", city, "&to=Zurich&limit=1&fields[]=connections/duration"))
cont <- content(r, as = "parsed", type = "application/json", encoding = "UTF-8")
}
获取个人旅程的持续时间。但是,我有一个更长的列表和更多的目的地。这就是为什么我正在寻找一种方法来并行发出多个请求。
请注意,我没有对此进行测试 - 但首先,您需要初始化您的并行工作器
library(parallel)
cl <- makeCluster(detectCores() - 1)
clusterEvalQ(cl, { library(Rcrawler) }) # load required packages onto each parallel worker
使用您的相关命令创建函数
custom_parse_json <- function(city) {
r <- GET(paste0("http://transport.opendata.ch/v1/connections?from=", city, "&to=Zurich&limit=1&fields[]=connections/duration"))
cont <- content(r, as = "parsed", type = "application/json", encoding = "UTF-8")
return(cont)
}
将函数导出到每个并行工作
clusterExport(cl, c("custom_parse_json"))
遍历城市列表
parLapply(cl, list_cities, function(i) custom_parse_json(i))
这应该 return 您的 JSON 内容列表。