Caros, Estou trabalhando com os dados dos censos populacionais de 2000 e 2010. A minha dificuldade é o volume de dados, pois cada censo tem aproximadamente 20 milhões de linhas. Considerando os dados estão em arquivos .csv, um único aquivo de 12 GB para o censo de 2010 e um arquivo para cada estado no censo de 2000, que totalizam 11 GB. Utilizo um notebook com processador Intel Core i5 2410M, 8 GB de ram com 3 GB de SWAP e o sistema operacional é o Arch Linux. Tenho quatro dúvidas que estão abaixo em meio da minha explicação sobre os problemas que venho enfrentando.
Para ler os arquivos .csv conheço as seguintes opções: a) trabalhar com um banco de dados relacional. R.: estou com um problema com o postgresql que ainda não tenho solução, portanto, essa alternativa esta descartada no momento. b) utilizar o sqldf. R.: acredito que o sqldf não é eficiênte para trabalhar com arquivos grandes, o processo é encerrado antes de concluir a operação. Exemplo: > library(sqldf) > read.csv.sql('censo00ba1.csv', sql = "select V0102 from file", header = TRUE, sep = ",") [ reached getOption("max.print") -- omitted 1498127 rows ] Warning messages: 1: closing unused connection 4 (censo00ba1.csv) 2: closing unused connection 5 (censo00ba1.csv) 1ª dúvida: isso sempre acontece com o sqldf, ou alguém consegue utilizá-lo com para ler arquivos grandes? c) utilizar o comando cut e grep do Linux/Mac para filtrar os dados e ter um arquivo .csv menor, dessa forma é possível ler o arquivo pelo comando do R, read.csv(). R.: utilizei essa opção. Exemplo: cut -d',' -f1,4,5,6,10,79,81,84,91,92,95,97,111,113,114,149,150,188 br2010.csv > br2010b.csv Uma vez superada a dificuldade da importação dos dados deletei algumas coisas e fiquei com três arquivos com as seguintes dimensões: > dim(cs);dim(cs2000);dim(cs2010) [1] 6077327 23 # censos 2000 e 2010 [1] 2865716 23 # censo 2000 [1] 3211611 23 # censo 2010 Quanto ao processamento: d) Consigo rodar regressão simples para o censo de 2000 e para o censo de 2010 separadamente, como segue exemplo: > ma <- lm(lnrenda ~ factor(ee) + idade + idade2 + factor(tt) + factor(cor.raca) + rural + feminino + migrante + factor(UF), data=cs2000) > mb <- lm(lnrenda ~ factor(ee) + idade + idade2 + factor(tt) + factor(cor.raca) + rural + feminino + migrante + factor(UF), data=cs2010) mas não consigo rodar o mesmo modelo para os dados do arquivo 'cs', que tem 6.077.327 linhas, que é censo 2000 mais censo 2010. Pois, aparece a seguinte mensagem de erro: > mc <- lm(lnrenda ~ factor(ee) + idade + idade2 + factor(tt) + factor(cor.raca) + rural + feminino + migrante + factor(UF) + factor(ano), data=cs) Error: cannot allocate vector of size 2.0 Gb 2ª dúvida: qual procedimento posso utilizar para solucionar esse problema de rodar a regressão das 6.077.327 observações? Um amigo indicou aumentar a memória SWAP, essa é uma boa opção? 3ª dúvida: ao realizar um processo que demanda muita memória ram o R não consegue realizar outro processo pesado em seguida, pois a memória fica ocupada. Exemplo, ao rodar uma regressão em uma base de dados com 3 milhões de linhas eu não consigo realizar outra regressão pq a memória fica cheia. Dúvida, tem como 'limpar' os dados da memória para poder realizar outros cálculos? 4ª dúvida: trabalhar com paralelismo pode auxiliar nesse tipo de processamento? Grato pela atenção. Roney
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.