Mam 4 miliardy wierszy danych w 12-węzłowym klastrze redshift. Z powodzeniem mogę połączyć się z nim za pomocą pakietu Rpostgreqsql i użyć dplyr do wykonywania podstawowych danych.Jak korzystać z tidyr (lub podobnych danych) na "dużych" danych w bazie danych PostgreSQL (Redshift)
Chciałbym jednak zmienić niektóre dane, które normalnie użyłbym w wersji reshape2 (dcast) lub tidyr (spread). Zauważyłem, że żaden pakiet nie jest wykonywany na moim obiekcie bazy danych. Mógłbym uruchomić "zbieranie", ale byłoby to problematyczne, ponieważ ta ramka danych byłaby zbyt duża, aby zmieścić się w pamięci (stąd powód, dla którego chcę działać w DB). Moim ogólnym celem jest wykorzystanie dcast/spread do poszerzenia danych przy jednoczesnym tworzeniu flag 0/1. Działa to jak urok z małymi próbkami danych na moim komputerze, ale nie tak dobrze na DB.
Poniżej znajduje się mój kod, nad którym pracuję. Łączenie z bazą danych i wykonywanie podstawowych filtrów za pomocą programu dplyr. Kiedy próbuję użyć tidyr/reshape2, R wyrzuca błędy składniowe, że „nie rozpoznał typu”
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)
Dzięki za komentarz. Jeśli chodzi o korzystanie z komputera z większą pamięcią + data.table ... to może działać. Mam instancję AWS EC2, która ma dużą pamięć pamięci. Czy istnieje korzyść z używania data.table z tym kontra tidyr? – leaRningR909
data.table przeznaczone dla bardzo dużych obiektów 10s milionów wierszy. Posiada funkcje dcastu i stopu zoptymalizowane dla obiektów data.table, a tam działa tak samo jak dcast/melt z reshape2. Myślę, że funkcje tidyr są bardziej logiczne, ale może to być osobiste preferencje, jednak nie jestem pewien, czy działa z natywnymi obiektami data.table, zamiast tego może najpierw przekonwertować do klasy tbl_df. – kismsu
Istnieje [wydanie] (https://github.com/tidyverse/tidyr/issues/189) związane z tym. Wydaje się, że w "tidyr" byłoby to czymś naturalnym. –