Biraz bölme yaptığım ve özetlediğim oldukça büyük bir veri kümem var (~ 1.4m satır). Her şey çalıştırmak için bir süre alır ve benim son uygulama sık çalışan bağlıdır, yani benim düşünce doMC
kullanmak ve böylece gibi plyr ile .parallel=TRUE
bayrağı (biraz basitleştirilmiş):Çok büyük veri kümesi ile plyr, doMC ve summarize() kullanma?
library(plyr)
require(doMC)
registerDoMC()
df <- ddply(df, c("cat1", "cat2"), summarize, count=length(cat2), .parallel = TRUE)
Ben ayarlarsanız 8 GB'lık RAM'im (registerDoMC(cores=2)
'u kullanarak) iki tane açıkça (2 registerDoMC(cores=2)
kullanarak) beni görüyorum ve iyi bir zaman harcıyor. Ancak, tüm 8 çekirdeği kullanmasına izin verirsem, çatallı süreçlerin her birinin bellekte tüm veri kümesini klonladığı gerçeği nedeniyle hızlı bir şekilde bellek biter.
Sorum şu: plyr'in paralel yürütme olanaklarını daha fazla bellek tutumuyla kullanmanın mümkün olup olmadığı nedir? Bir big.matrix
benim dataframe dönüştürme çalıştım ama bu sadece tek bir çekirdek kullanmaya geri şeyi zorlamak gibiydi: Bu çok çekirdekli R bilişime benim ilk baskını
library(plyr)
library(doMC)
registerDoMC()
library(bigmemory)
bm <- as.big.matrix(df)
df <- mdply(bm, c("cat1", "cat2"), summarize, count=length(cat2), .parallel = TRUE)
olduğunu
, bu nedenle daha iyi bir yolu olup olmadığını Bunu düşünerek öneriye açığım.GÜNCELLEME: Hayatta birçok şeyde olduğu gibi, bu benim kodunda başka yerde Diğer Aptal şeyler yapıyordu çıkıyor ve çok işlemenin bütün mesele bu özel durumda tartışmalı bir noktaya olur. Ancak, büyük veri katlama görevleri için, data.table
'u aklımda tutacağım. Katlama görevimi basit bir şekilde kopyalayabildim.
Bu tür şeylerde genellikle çok daha hızlı olan ** data.table ** paketini ifade eden zorunlu yorumunuzu bırakacağım. – joran
Hey, onu bana dövdün! –
Gerçekten 8 çekirdiniz var mı? Ya da 4 çekirdekli ve 4 "hiper-iş parçacığı" çekirdekli Intel? MPICH (R değil) altında çalışan ve% 50 CPU'da 4'e kadar ölçek uygulayan bir uygulama var, ancak% 100 CPU veren 8 çekirdekten sonra çok daha yavaş çalışıyor. –