![](/img/trans.png)
[英]Extracting text data into a meaningful table for analysis using Python (or R)
[英]Data analysis using R/python and SSDs
有沒有人使用r / python與存儲在固態硬盤中的數據有任何經驗。 如果您主要進行讀取操作,理論上這應該會顯着改善大型數據集的加載時間。 我想知道這是否屬實,是否值得投資SSD以提高數據密集型應用程序的IO速率。
我的2美分:SSD只有在你的應用程序存儲在它上面時才會得到回報,而不是你的數據。 即便如此,只有在需要大量磁盤訪問時才需要,例如操作系統。 人們指向你進行剖析是正確的。 我可以告訴你,沒有這樣做,幾乎所有的閱讀時間都是處理,而不是讀取磁盤。
考慮數據格式而不是存儲位置,可以獲得更多回報。 通過使用正確的應用程序和正確的格式,可以獲得讀取數據的加速。 就像使用R的內部格式而不是使用文本文件一樣。 把它作為一個驚嘆號:永遠不要繼續使用文本文件。 如果您需要速度,請轉二進制。
由於開銷,如果您有SSD或普通磁盤來讀取數據,通常沒有區別。 我有兩個,並使用普通磁盤的所有數據。 我有時會在大數據集周圍玩耍,從未遇到過問題。 當然,如果我必須非常沉重,我只需要在我們的服務器上工作。
因此,當我們談論數據演出時,它可能會有所不同,但即便如此,我仍然非常懷疑磁盤訪問是限制因素。 除非你不斷讀寫磁盤,否則我會說你應該再開始思考你究竟在做什么。 而不是將錢花在SDD驅動器上,額外的內存可能是更好的選擇。 或者只是說服老板給你一個不錯的計算服務器。
使用虛假數據幀的定時實驗,以及在SSD磁盤上與普通磁盤上以文本格式對二進制格式進行讀寫。
> tt <- 100
> longtext <- paste(rep("dqsdgfmqslkfdjiehsmlsdfkjqsefr",1000),collapse="")
> test <- data.frame(
+ X1=rep(letters,tt),
+ X2=rep(1:26,tt),
+ X3=rep(longtext,26*tt)
+ )
> SSD <- "C:/Temp" # My ssd disk with my 2 operating systems on it.
> normal <- "F:/Temp" # My normal disk, I use for data
> # Write text
> system.time(write.table(test,file=paste(SSD,"test.txt",sep="/")))
user system elapsed
5.66 0.50 6.24
> system.time(write.table(test,file=paste(normal,"test.txt",sep="/")))
user system elapsed
5.68 0.39 6.08
> # Write binary
> system.time(save(test,file=paste(SSD,"test.RData",sep="/")))
user system elapsed
0 0 0
> system.time(save(test,file=paste(normal,"test.RData",sep="/")))
user system elapsed
0 0 0
> # Read text
> system.time(read.table(file=paste(SSD,"test.txt",sep="/"),header=T))
user system elapsed
8.57 0.05 8.61
> system.time(read.table(file=paste(normal,"test.txt",sep="/"),header=T))
user system elapsed
8.53 0.09 8.63
> # Read binary
> system.time(load(file=paste(SSD,"test.RData",sep="/")))
user system elapsed
0 0 0
> system.time(load(file=paste(normal,"test.RData",sep="/")))
user system elapsed
0 0 0
http://www.codinghorror.com/blog/2010/09/revisiting-solid-state-hard-drives.html有一篇關於SSD的好文章,評論提供了很多見解。
取決於您正在進行的分析類型,無論是CPU綁定還是IO綁定。 處理回歸建模的個人經驗告訴我,以前更常見的情況是,SSD不會有太多用處。
簡而言之,最好先對您的應用進行分析。
對不起,但我不同意@joris的評分最高的答案。 確實,如果運行該代碼,二進制版本幾乎不需要寫入時間。 但那是因為測試集很奇怪。 每一行的大柱子'longtext'都是一樣的。 R中的數據幀足夠智能,不能多次存儲重復值(通過因子)。
所以最后我們完成了一個700MB的文本文件而不是一個335K的二進制文件(當然二進制文件的速度要快得多)
-rw-r--r-- 1 carlos carlos 335K Jun 4 08:46 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun 4 08:46 test.txt
但是,如果我們嘗試隨機數據
> longtext<-paste(sample(c(0:9, letters, LETTERS),1000*nchar('dqsdgfmqslkfdjiehsmlsdfkjqsefr'), replace=TRUE),collapse="")
> test$X3<-rep(longtext,26*tt)
>
> system.time(write.table(test,file='test.txt'))
user system elapsed
2.119 0.476 4.723
> system.time(save(test,file='test.RData'))
user system elapsed
0.229 0.879 3.069
和文件沒有那么不同
-rw-r--r-- 1 carlos carlos 745M Jun 4 08:52 test.RData
-rw-rw-r-- 1 carlos carlos 745M Jun 4 08:52 test.txt
如您所見,經過的時間不是用戶+系統的總和...因此磁盤是兩種情況下的瓶頸。 是的二進制存儲總是會更快,因為您不必包含分號,引號或類似的人員,而只是將內存對象轉儲到磁盤。
但總有一點是磁盤成為瓶頸。 我的測試是在一個研究服務器上運行的,通過NAS解決方案我們獲得超過600MB / s的磁盤讀/寫時間。 如果你在筆記本電腦上做同樣的事情,那么難以超過50MB / s,你就會注意到它們之間的區別。
所以,如果你實際上必須處理真正的bigData(並且重復一百萬次,相同的千字符串不是大數據),當數據的二進制轉儲超過1 GB時,你會欣賞有一個好的磁盤(SSD讀取輸入數據並將結果寫回磁盤是一個很好的選擇。
我必須提出約翰的第二個建議來描述您的申請。 我的經驗是,實際數據讀取不是緩慢的部分,而是創建編程對象以包含數據,從字符串轉換,內存分配等的開銷。
我強烈建議您首先分析您的代碼,並考慮使用替代庫(如numpy)來查看在投資硬件之前可以獲得哪些改進。
SSD的讀取和寫入時間明顯高於標准的7200 RPM磁盤(使用10k RPM磁盤仍然是值得的,不知道它在15k以上有多大改進)。 所以,是的,你可以在數據訪問上獲得更快的時間。
性能提升是不可否認的。 那么,這是一個經濟學問題。 2TB 7200 RPM磁盤每片170美元,100GB SSDS售價210美元。 因此,如果您有大量數據,則可能會遇到問題。
如果您讀取/寫入大量數據,請獲取SSD。 但是,如果應用程序是CPU密集型的,那么從獲得更好的處理器中獲益更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.