2012-01-30 12 views
8

Sau khi CSV được tải qua read.csv, nó khá tầm thường khi sử dụng multicore, segue v.v. để phát xung quanh với dữ liệu trong CSV. Đọc nó trong, tuy nhiên, là khá thời gian chìm.R: Có thể thực hiện song song/tăng tốc độ đọc của 20 triệu hàng CSV cộng vào R không?

Nhận ra nó tốt hơn để sử dụng mySQL vv vv

Giả sử việc sử dụng một 8xl AWS cụm dụ tính toán chạy R2.13

Specs như sau:

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) 

Bất kỳ suy nghĩ/ý tưởng Nhiều đánh giá cao.

+0

Câu hỏi này cũng có thể thú vị cho bạn: http://stackoverflow.com/questions/9061736/faster-than-scan-with-rcpp –

+0

Hoặc câu hỏi này cũng http://stackoverflow.com/questions/1727772/nhanh-đọc-rất-lớn-bảng-như-dataframes-in-r –

Trả lời

2

Điều bạn có thể làm là sử dụng scan. Hai đối số đầu vào của nó có thể chứng minh là thú vị: nskip. Bạn chỉ cần mở hai hoặc nhiều kết nối vào tệp và sử dụng skipn để chọn phần bạn muốn đọc từ tệp. Có một số cảnh báo:

  • Ở một số giai đoạn, đĩa có thể chứng minh được cổ chai.
  • Tôi hy vọng rằng quá trình quét sẽ không phàn nàn khi mở nhiều kết nối đến cùng một tệp.

Nhưng bạn có thể thử và xem nó có tăng tốc độ của bạn hay không.

2

Flash hoặc bộ nhớ HD thông thường? Nếu sau này, sau đó nếu bạn không biết nơi tập tin được trên ổ đĩa, và làm thế nào nó được phân chia, nó rất khó để tăng tốc độ bởi vì nhiều lần đọc đồng thời sẽ không được nhanh hơn một đọc trực tiếp. Đó là vì đĩa, không phải CPU. Không có cách nào để song song điều này mà không bắt đầu ở mức lưu trữ của tệp.

Nếu đó là bộ nhớ flash thì một giải pháp như Paul Hiemstra có thể giúp vì lưu trữ flash tốt có thể có hiệu suất đọc ngẫu nhiên tuyệt vời, gần với tuần tự. Hãy thử nó ... nhưng nếu nó không giúp bạn biết tại sao.

Ngoài ra ... một giao diện bộ nhớ nhanh không cần thiết có nghĩa là các ổ đĩa có thể bão hòa nó. Bạn có chạy thử nghiệm hiệu suất trên các ổ đĩa để xem tốc độ thực sự của chúng không?

5

Đi song song có thể không cần thiết nếu bạn sử dụng fread trong data.table.

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

Nhận xét này question minh họa sức mạnh của nó. Ngoài ra, đây là ví dụ từ trải nghiệm của riêng tôi:

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

Tôi đã đọc được 1,04 triệu hàng trong vòng 10 giây!

+0

Hi, là nó có giá trị fread song song khi nhiều tập tin? có phải vì hạn chế truy cập đĩa không? – Boris

+0

Xin chào Borris, tôi khuyên bạn nên đăng câu hỏi mới với sự cố của bạn. Câu trả lời tùy thuộc vào lượng bộ nhớ bạn cần, kích thước tệp của bạn và những gì bạn đang cố gắng làm. Ngoài ra, bạn có bộ nhớ hoặc CPU giới hạn? –