операция с dplyr

Я работаю над большим фреймом данных в R 2,3 миллиона записей, которые содержат транзакции пользователей в местах с начальным и конечным временем. Моя цель - создать новый фрейм данных, который будет содержать количество времени, подключенного на пользователя / на местоположение. Давайте назовем это почасовой связью.

Транзакция может варьироваться от 8 минут до 48 часов, поэтому целевая датафрейм будет составлять около 100 миллионов записей и будет расти с каждым месяцем.

Код внизу показывает, как разрабатывается окончательный фрейм данных, хотя общий код намного сложнее. Выполнение всего кода занимает ~ 9 часов на процессоре Intel® Xeon® R E5-2630 v3 @ 2,40 ГГц, 16 ядер 128 ГБ ОЗУ.

library(dplyr)

numsessions<-1000000
startdate <-as.POSIXlt(runif(numsessions,1,365*60*60)*24,origin="2015-1-1")

df.Sessions<-data.frame(userID = round(runif(numsessions,1,500)),
           postalcode = round(runif(numsessions,1,100)),
           daynr = format(startdate,"%w"),
              start =startdate ,
              end=   startdate + runif(1,1,60*60*10)
           )


dfhourly.connected <-df.Sessions %>% rowwise %>% do(data.frame(userID=.$userID,
                                          hourlydate=as.Date(seq(.$start,.$end,by=60*60)),
                                          hournr=format(seq(.$start,.$end,by=60*60),"%H")
                                          )
                               )

Мы хотим распараллелить эту процедуру над (некоторыми из) 16 ядрами, чтобы ускорить процедуру. Первой попыткой было использоватьmultidplyr пакет. Раздел сделан на основеdaynr

df.hourlyconnected<-df.Sessions %>% 
                      partition(daynr,cluster=init_cluster(6)) %>%
                      rowwise %>% do(data.frame(userID=.$userID,
                            hourlydate=as.Date(seq(.$start,.$end,by=60*60)),
                            hournr=format(seq(.$start,.$end,by=60*60),"%H")
                              )
                            ) %>% collect()

Теперьrowwise Похоже, что функция требует ввода данных в качестве ввода вместо раздела.

Мои вопросы

Есть ли обходной путь для выполнения вычисления по строкам для разделов на ядро?

Кто-нибудь получил предложение выполнить этот расчет с другим пакетом и методами R?

Ответы на вопрос(1)

Ваш ответ на вопрос