Сбой R при экспорте большой матрицы в снежный кластер
У кого-нибудь здесь был успех при экспорте большой матрицы в снежный кластер в R? Комментируемые строки в примерах bigmatrix и attach.resource говорят о том, что это возможно, но я не добился успеха.
library(bigmemory)
library(snow)
z <- big.matrix(3, 3, type='integer', init=3)
cl = makeCluster(8, type = "SOCK")
clusterEvalQ(cl,{library(bigmemory)})
zdescription <- describe(z)
clusterExport(cl,"zdescription")
clusterEvalQ(cl,{y <- attach.resource(zdescription)}) #attach.big.matrix also crashes
Также происходит сбой, даже если я использую большую матрицу с файловой поддержкой (что странно, поскольку в ней даже не используется общая память)
[[1]]
Warning: This is not advised. Here is the head of the matrix:
*** caught segfault ***
address 0x10, cause 'memory not mapped'
Traceback:
1: .Call("CGetNrow", x@address)
2: nrow(x)
3: nrow(x)
4: .local(x, ...)
5: head(x)
6: head(x)
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
1 ответ
Решение
Я наконец обнаружил проблему. Похоже, проблема была при печати результатов:
Если obj
большая матрица, то big.clusterEvalQ(cl,{obj})
выдаст ошибку.
Таким образом, способ решить проблему - просто добавить константу после функции attach.resource:
clusterEvalQ(cl,{y <- attach.resource(zdescription);1})