如何使用 `Parallel::mclapply` 高效地 运行 800 万行数据?

How to run 8 million rows of data with `Parallel::mclapply` efficiently?

我尝试使用以下代码拆分包含大约 800 万个元素的字符向量

library(parallel)
detectCores()

s <- system.time({
    sepTime <- mclapply(orders_largest1stGroup$Time, function(x) x %>% strsplit(split = " ") %>% unlist() %>% strsplit(split = ":") %>% unlist(), mc.cores = 2) 
})

sepTime %>% unlist() %>% matrix(ncol=4, byrow=T) %>% as.data.frame()

矢量orders_largest1stGroup$Time如下所示

"2016-01-01 13:37:23", "2016-01-02 16:37:23", "2016-01-03 12:37:23"

然而15分钟过去了,还是运行宁。所以,我想知道我的代码或我的做法一定有什么地方不对。

任何人都可以看看并告诉我如何快速 运行 这段代码吗?

我认为这会比 apply 方法更有效。

dat <- c("2016-01-01 13:37:23", "2016-01-02 16:37:23", "2016-01-03 12:37:23")
dat <- strptime(dat, format="%F %X") 
date <- format(dat, "%F")
hour <- format(dat, "%H")
minute <- format(dat, "%M")
seconds <- format(dat, "%S")

如果您有兴趣优化流程,也许您可​​以将数据分成不同的子集,然后使用 mclapply 或等效工具分别调整每个集。

拆分这 800 万行的更有效解决方案data.frame: largeData$Time 是一个字符串向量,例如

"2016-01-01 13:37:23", "2016-01-02 16:37:23", "2016-01-03 12:37:23"

要在 30 秒内拆分它们,请执行此操作而不是 for 循环:

largeData %>% mutate(Date=Time %>% substr(1,10) %>% as.Date(), Hour=Time %>% substr(12,13) %>% as.numeric(), Minute=Time %>% substr(15,16) %>% as.numeric())