我试图并行化一些html文档中保存的数据的提取并将其存储到data.frames(数百万个文档,因此并行化的有用性).
在第一步,在我注册队列的机器上,我选择html文件的一个子集并向他们提供read_html函数(从rvest包中,我也尝试了XML包中的类似函数但是我是获取内存泄漏问题)获取存储许多html页面内容的唯一列表.
然后我在这个列表中使用一个迭代器来获取它的较小块以供给foreach.
在foreach中,我构建了data.frame(s)(使用html_table函数和一些基本的数据操作),然后返回一个列表,其元素是已清理的data.frames.
我试图在win 8上使用doSNOW后端,在ubuntu 16.04上使用doRedis后端.
在第一种情况下,返回空列表的列表,而在第二种情况下,抛出内存映射的错误; 你可以在问题的最底部找到追溯.
据我所知,我发送到核心的(大块)列表不符合我的预期.我已经聚集在一起,列表对象可能只是一组指针,但我无法确认它; 也许这可能是问题?是否有"列表方式"替代"封装"多个html页面的数据?
下面你可以找到一些复制问题的代码.我是一个全新的堆栈溢出,新的并行编程和R编程的新手:任何改进的建议都是受欢迎的.谢谢大家.
library(rvest)
library(foreach)
#wikipedia pages of olympic medalist between 1992 and 2016 are
# downloaded for reproducibility
for(i in seq(1992, 2016, by=4)){
html = paste("https://en.wikipedia.org/wiki/List_of_", i, "_Summer_Olympics_medal_winners", sep="")
con = url(html)
htmlCode = readLines(con)
writeLines(htmlCode, con=paste(i, "medalists", sep="_"))
close(con)
}
#declaring the redis backend (doSNOW code is also included below)
#note that I am using the package from
#devtools::install_github("bwlewis/doRedis") due to a "nodelay error"
#(more info on that here: …Run Code Online (Sandbox Code Playgroud)