我正在使用RCurl一次处理多个http请求。 (使用httr::GET
和RJSONIO
时我没有问题,但有几百万条记录。)
我正在使用fcc.gov api将lat,long信息转换为人口普查区块级别(FIPS代码)。
基本上,我有以JSON格式返回的URL列表。
> head(urls)
[1] "http://data.fcc.gov/api/block/find?format=json&latitude=42.644825&longitude=-83.40611&showall=false"
[2] "http://data.fcc.gov/api/block/find?format=json&latitude=40.8434&longitude=-74.540344&showall=false"
> res[1:1000] = str_extract(as.character(getURL(urls[1:1000])),
"[0-9]{15}")
这基本上就是我如何处理getURL
函数,并在不将RSON中的JSON转换为df的情况下提取相关信息,这是不必要的。
一次getURL
个> write.csv(res, "res1.csv", row.names = F)
Error in file(file, ifelse(append, "a", "w")) :
cannot open the connection
Calls: write.csv -> eval.parent -> eval -> eval -> write.table -> file
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
cannot open file 'res1.csv': Too many open files
Execution halted
sh: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: Error 24
个来电请求请求,我正在循环播放数百万条记录。
问题是它为每个实例建立了一个连接,并且从不在libcurl级别断开连接或关闭。 当我尝试将最终输出写入csv或RDS文件时,它无法处理并给出系统错误“太多打开的文件”。
url
我可以使用基础close
和{{1}},但对于大量数据,我需要使用RCurl来提高效率。但是,由于这种限制,我无法继续。
R中似乎没有可以一次处理多个http请求的替代方案。
任何帮助将不胜感激。