2016-02-10 20 views
6

Tôi có 4 tỷ hàng dữ liệu trong một cụm redshift 12 nút. Tôi thành công có thể kết nối với nó với các gói Rpostgreqsql và sử dụng dplyr để làm dữ liệu cơ bản wrangling.Làm thế nào để sử dụng tidyr (hoặc dữ liệu tương tự wrangling) trên dữ liệu "lớn" trong cơ sở dữ liệu postgreSQL (Redshift)

Tuy nhiên, tôi muốn thực hiện một số định dạng lại dữ liệu mà tôi thường sử dụng reshape2 (dcast) hoặc tidyr (spread) để thực hiện. Tôi thấy rằng không phải gói nào thực hiện trên đối tượng cơ sở dữ liệu của tôi. Tôi có thể chạy "thu thập" nhưng đó sẽ là vấn đề vì dataframe đó sẽ là quá lớn để phù hợp với bộ nhớ (vì vậy lý do tôi muốn chạy trong DB). Mục tiêu tổng thể của tôi là sử dụng dcast/spread để làm cho dữ liệu rộng hơn trong khi tạo ra 0/1 cờ trong tiến trình. Điều này làm việc như một sự quyến rũ với các mẫu dữ liệu nhỏ trên máy tính của tôi, nhưng không tốt trên DB.

Dưới đây là mã của tôi mà tôi đang làm việc. Kết nối với DB và thực hiện lọc cơ bản với dplyr. Khi tôi cố gắng sử dụng tidyr/reshape2, R ném lỗi cú pháp "loại không được nhận dạng"

Redshift <- src_postgres('dev', 
         host = 'xxx.aws.com', 
         port = 5439, 
         user = "user", 
         password = "pwd") 


### create table reference ### 
df <- tbl(Redshift, "df_cj_allact") 

# simple and default R commands analyzing data frames 
dim(df) 
colnames(df) 
head(df) 

df2 <- df %>% filter(id != '0') %>% arrange(id, timestamp, category) # seems to work! 
# 2157398, was 2306109 (6% loss) 

Trả lời

2

gói tidyr không hỗ trợ phụ trợ cơ sở dữ liệu. Bạn chỉ có thể thao tác trong dữ liệu bộ nhớ. dplyr làm việc với các bảng cơ sở dữ liệu cũng như trong các đối tượng bộ nhớ. Bạn có thể thử sử dụng máy với bộ nhớ lớn hơn (nói trên AWS) và sử dụng data.table, hoặc suy nghĩ về việc tách dữ liệu của bạn.

+0

Cảm ơn nhận xét của bạn. Về việc sử dụng máy có bộ nhớ lớn hơn + data.table ... điều này có thể hoạt động. Tôi có một ví dụ AWS EC2 là bộ nhớ được cấp phép nặng. Có một lợi thế để sử dụng data.table với điều đó so với tidyr? – leaRningR909

+0

data.table được thiết kế cho các đối tượng rất lớn 10s hàng triệu hàng. Nó có các chức năng dcast và melt được tối ưu hóa cho các đối tượng data.table, và có hoạt động giống như dcast/melt từ reshape2. Tôi nghĩ rằng các chức năng tidyr là hợp lý hơn, nhưng nó có thể là sở thích cá nhân, tuy nhiên, tôi không chắc chắn rằng nó hoạt động với các đối tượng data.table nguyên bản, thay vào đó nó có thể chuyển đổi thành lớp tbl_df trước tiên. – kismsu

+1

Có [vấn đề] (https://github.com/tidyverse/tidyr/issues/189) liên quan đến vấn đề này. Nó có vẻ giống như một thứ tự nhiên có trong 'tidyr'. –

Các vấn đề liên quan