Re: [問題] 透過R使用Rhdfs package讀取超大CSV檔
最近自己在玩hadoop-2.2.0的hdfs,
發現已經有C client。
試了一下,發現可以用Rcpp簡單包到R中。
我自己測試的讀取效能約50MB/s (可能和網路有關),
和command line的hadoop差不多。
※ 引述《dppman (*^o^*)》之銘言:
: ※ 引述《Wush978 (拒看低質媒體)》之銘言:
: : 建議你先測量一下throughput
: : ```r
: : start.time <- Sys.time()
: : repeat {
: : m = hdfs.read(f)
: : duration <- as.numeric(difftime(Sys.time(), start.time, unit = "secs"))
: : print(length(m) / duration) # 每秒的bytes數
: : start.time <- Sys.time()
: : }
: : ```
: : 先看一下hdfs.read的效能,如果throughput是1MB / s的速度的話
: : 20G 需要 20*2^30 / 2^20 秒,大約是5.6小時
: : ---
: : 也建議你另外量測一下hdfs fs -put 的頻寬,
: : 拿來和你在R 裏面的測到的throughput做比較。
: : 兩者的差距是你可以在R 裡面優化的程度。
: : 所以如果兩者差不多快的話,其實你R 怎麼改也是這樣。
: : FYI
: 測試了一下throughput:
: 在同要的主機(安裝RStudio Server的主機):
: Part I:
: [root@CDH-RWeb01 ~]# time hadoop fs -put /tmp/201303.csv /tmp/
: real 3m5.876s
: user 0m32.257s
: sys 0m14.262s
: [root@CDH-RStudio ~]# ls -al /tmp/201303.csv
: -rw-r--r-- 1 root root 8596758123 2014-05-23 09:54 /tmp/201303.csv
: 結果:大約在64086KB /sec
: Part II:
: 用下列這段測試
: start.time <- Sys.time()
: repeat {
: m = hdfs.read(f)
: duration <- as.numeric(difftime(Sys.time(), start.time, unit = "secs"))
: print(length(m) / duration) # 每秒的bytes數
: start.time <- Sys.time()
: }
: 結果:450KB/sec ~ 465KB/sec
: [1] 464816.2
: [1] 465376.1
: [1] 464151.4
: [1] 457809.4
: [1] 456209.6
: [1] 453534.4
: [1] 454532.2
: [1] 450441.2
: 差距很大@@@@
: 該怎麼優化呢?
: Thanks in advance.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.242.21
※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1409157227.A.872.html
※ 編輯: Wush978 (114.24.242.21), 08/28/2014 00:34:31
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章