2012-01-30 57 views
8

一旦通過read.csv加載CSV,使用multicore, segue等來播放CSV中的數據是相當簡單的。然而,閱讀它的時間已經過去了。R:是否可以將2000萬行CSV中的讀數並行/加速到R?

實現它更好地使用MySQL等等等等

假設使用AWS 8XL的集羣中運行R2.13

計算實例

規格如下:

Cluster Compute Eight Extra Large specifications: 
88 EC2 Compute Units (Eight-core 2 x Intel Xeon) 
60.5 GB of memory 
3370 GB of instance storage 
64-bit platform 
I/O Performance: Very High (10 Gigabit Ethernet) 

任何想法/想法非常感激。

+0

這個問題可能也是有趣的你:http://stackoverflow.com/questions/9061736/faster-than-scan-with-rcpp – 2012-01-30 10:38:21

+0

或這一個以及http://stackoverflow.com/questions/1727772 /快速閱讀,非常大的表,作爲數據框在-r – 2012-01-30 14:13:43

回答

2

你可以做的是使用scan。其中兩個輸入參數可能被證明是有趣的:nskip。您只需打開兩個或多個文件連接,然後使用skipn選擇要從文件讀取的部分。有一些注意事項:

  • 在某個階段磁盤I/O可能會證明瓶頸。
  • 我希望在打開多個連接到同一個文件時掃描不會發生抱怨。

但是,您可以嘗試一下,看看它是否會提高您的速度。

2

閃存或傳統高清存儲?如果是後者,那麼如果你不知道驅動器上的文件位置以及它是如何分割的,則很難加快速度,因爲多個同時讀取不會比一個流式讀取更快。這是因爲磁盤,而不是CPU。如果沒有從文件的存儲級別啓動,則無法將其並行化。

如果是閃存存儲,那麼類似Paul Hiemstra的解決方案可能會有所幫助,因爲良好的閃存存儲具有出色的隨機讀取性能,接近順序。試試吧......但是如果它不能幫助你知道爲什麼。

另外...快速存儲接口並不是必要的,這意味着驅動器可以飽和它。你有沒有對硬盤進行性能測試,看看它們的速度有多快?

5

如果在data.table中使用fread,則可能不需要並行。

library(data.table) 
dt <- fread("myFile.csv") 

對此question的評論說明了它的力量。而且,這裏是一個例子,從我自己的經驗:

d1 <- fread('Tr1PointData_ByTime_new.csv') 
Read 1048575 rows and 5 (of 5) columns from 0.043 GB file in 00:00:09 

我能在104萬行的下10S閱讀!

+0

嗨,它是值得fread並行時,多個文件?是否因爲磁盤訪問限制? – Boris 2016-09-01 09:49:04

+0

嗨博里斯,我會建議你發佈一個新的問題與您的問題。答案取決於你需要多少內存,文件的大小以及你想要做什麼。另外,你是內存還是CPU有限? – 2016-09-01 13:41:23