Re: [問題] parSapply問題

作者: celestialgod (天)   2016-03-18 00:39:58
※ 引述《SFMAndroid (安卓發送)》之銘言:
: [問題類型]:
:
: 效能諮詢(我想讓R 跑更快)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 入門(寫過其他程式,只是對語法不熟悉)
:
: [問題敘述]:
: 請簡略描述你所要做的事情,或是這個程式的目的
: 爬PTT文章,原本是用sapply加上自定義函數,
: 但實在跑太久,想說用snow::parSapply會不會比較快,
: 但一直遇到問題@@
: 除了找不到所有httr裡的函數外
: 即使用clusterEvalQ把所有未定義的函數都定義後,
: 就出現is.url(url) is not true的無限輪迴...
: 但改回用sapply除了跑很久外完全正常,
: 請問有沒有大大知道該怎麼辦??
: 感謝~
: [程式範例]:
:
: https://gist.github.com/anonymous/a45f6d04254adb27e64a
:
: [環境敘述]:
:
: R version 3.2.1 (2015-06-18)
: Platform: i386-w64-mingw32/i386 (32-bit)
: Running under: Windows 8 x64 (build 9200)
: locale:
: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
: [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
: [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
: [4] LC_NUMERIC=C
: [5] LC_TIME=Chinese (Traditional)_Taiwan.950
: attached base packages:
: [1] parallel stats graphics grDevices utils datasets methods base
:
: [關鍵字]:
:
: snow, parallel computing
:
不要去寫入硬碟在讀取,我不確定在平行時候開啟硬碟讀取會不會出事...
但是我覺得你可以不用去寫入硬碟,再重新讀入虛耗時間...
好讀版:http://pastebin.com/TKN2jWHr
然後我也不推薦用XML,我比較建議使用xml2 參考#1MbXOkFc (R_Language)
library(xml2)
library(RCurl)
library(magrittr)
library(stringi)
i <- 2793
data <- NULL
repeat{
url.list <- try(paste(i, '.html', sep='') %>%
paste('https://www.ptt.cc/bbs/Boy-Girl/index', ., sep='') %>%
xml2::read_html() %>%
xml2::xml_find_all("//div[@class='title']/a[@href]") %>%
xml2::xml_attr("href"), silent = TRUE)
if (any(grepl("Error", url.list)))
break
data %<>% c(url.list)
i <- i + 1
}
data %<>% paste('https://www.ptt.cc', ., sep='')
getDoc <- function(line){
xml2::read_html(line, "UTF-8") %>%
xml2::xml_find_one("//div[@id='main-content']") %>%
xml_text %>% stri_conv("UTF-8", "Big5")
# stri_conv for windows
}
st <- proc.time()
articles <- sapply(data, getDoc)
proc.time() - st
# user system elapsed
# 3.35 3.70 7.21
作者: naturalsmen (日日夜夜)   2016-03-18 20:43:00
喔喔感謝板大 code變得超簡潔 也快很多 本來是因為不熟xml2 想說偷懶用以前寫的就好XD

Links booklink

Contact Us: admin [ a t ] ucptt.com