如何使用 `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())
我尝试使用以下代码拆分包含大约 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())