Растеризация и мозаика большого (~15GB) CSV параллельно
Я пытаюсь растеризовать большой CSV-файл, который содержит координаты X и Y растровых пикселей и идентификатор, представляющий разных людей, которые прошли через пиксель.
Я хочу, чтобы в этой операции было 2 растра: во-первых, каждый пиксель растра содержит количество раз, когда люди пересекли его, а во-вторых, каждый пиксель содержит количество уникальных людей, которые его пересекли.
В настоящее время я создаю растры для каждого идентификатора, а затем создаю мозаику для растров. Я распараллелил эту операцию, используя 16 ядер и процессор с 200 ГБ оперативной памяти. Однако CSV содержит более миллиона строк, и кажется, что копирование его в каждое ядро требует больших затрат. Это также занимает более 4 дней, и у меня есть несколько таких файлов CSV.
Есть ли лучший, более быстрый способ сделать это?
Это то, что я делаю в настоящее время:
n.cores <- 16 #this is half of the available cores
#Register CoreCluster
cl <- makeCluster(n.cores)
registerDoSNOW(cl)
clusterExport(cl=cl, "fil2" ) #fil2 is the CSV
#uq_id is a vector of all unique IDs
rasterList= foreach(i=1:length(uq_id), .combine='comb',
.init=list()) %dopar% {
library(raster)
#create a raster for each unique ID
dfXYID <- subset(fil2, uqid %in% i)
dfXYID$uqid <- as.numeric(dfXYID$uqid)
dfXYID=as.data.frame(dfXYID)
x <- raster(xmn=min(dfXYID$V1), xmx=max(dfXYID$V1), ymn=min(dfXYID$V2), ymx=max(dfXYID$V2), res=220, crs="+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs")
#create a raster of the number of times individual with ID i have moved through a pixel
lenList <- rasterize(dfXYID[, c('V1', 'V2')], x, dfXYID[, 'uqid'], fun=function(x,...){length((na.omit(x)))})
return(lenList)
}
В этом случае rasterList представляет собой список растров, каждый из которых представляет движение отдельного пользователя i. Затем мне нужно выполнить еще одну трудоемкую операцию (могу ли я сделать это параллельно в вышеупомянутом foreach?): Применить операцию мозаики к этому большому списку, чтобы получить 2 растровых выхода, которые мне нужны.
Я был бы очень признателен, если у кого-нибудь есть предложения о том, как я могу ускорить это.
Я понимаю, что gdal - это вариант, но я вынужден работать с CSV, и я не хочу писать каждый растр в rasterList
на диск для дальнейшей обработки с помощью gdal.