作者dppman (*^o^*)
标题Re: [问题] 透过R使用Rhdfs package读取超大CSV档
时间Fri May 23 10:28:17 2014
※ 引述《Wush978 (拒看低质媒体)》之铭言:
: ※ 引述《dppman (*^o^*)》之铭言:
: : 我试了repeat:
: : repeat {
: : m = hdfs.read(f)
: : c = rawToChar(m)
: : print(c)
: : if ( is.null(c) ) break
: : }
: : 可是跑好久还没跑完...
: : 我是用Web版的RStudio开发,看了一下m的type是raw...
: : Sorry..我只剩C还在脑中有,R实在跟他不熟....
: : 不知道是否有人可以指点一下...,这样的写法是否OK?怎麽增加效能呢?
: : Thanks in advance!
: :
: 建议你先测量一下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), 来自: 59.120.150.53
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1400812100.A.62F.html
1F:→ Wush978:加大buffersize看看 05/24 00:50
2F:→ dppman:如果想插Rprof()该放哪里比较好呢? 05/27 10:32