#r #dataframe #apache-spark #storage #sparklyr
#r #фрейм данных #apache-spark #Хранение #sparklyr
Вопрос:
Я пытаюсь преобразовать data.frame
в Spark DataFrame
:
library(sparklyr)
conf <- list()
conf$`sparklyr.cores.local` <- 4
conf$`sparklyr.shell.driver-memory` <- "16G"
conf$spark.memory.fraction <- 0.9
sc <- spark_connect(master = "local",
config = conf)
load("./data/dfm_training.RData")
load("./data/training.RData")
df <- training[,c(1,2,3,18)]
df$TextLength <- nchar(df$txt)
df <- df[df$TextLength > 0,]
df.tokens.df <- cbind(nchar = df$TextLength, label = df$training2_CFT,
convert(dfm_training, to = "data.frame"))
## to spark
sdf <- copy_to(sc, df.tokens.df)
Однако я получаю следующую ошибку:
Error: C stack usage 133776899 is too close to the limit
Я попытался переключить количество ядер и количество используемой памяти, но без изменений.
Комментарии:
1. Что вы испытываете, так это то, что
copy_to
каким-то образом выполняется рекурсивный вызов, добавляющий слишком много вызовов функций в стек. В предыдущем выпуске на github от 2016 года была аналогичная проблема.R
в общем случае не допускает рекурсии по глубине. Однако возникает большой вопрос, почему это происходит при простом вызовеcopy_to
. Это не сразу видно из вашего примера.2. Я видел эту проблему, однако они ее не решают. Мой
df.tokens.df
имеет около 4 ГБ, как вы думаете, это может быть связано?3. Честно? Нет. Я сам не могу понять причину в вашем конкретном примере, но если вы знакомы с отладкой, вы могли бы теоретически попробовать вызвать
debug(sparklyr::copy_to)
и посмотреть, сможете ли вы найти конкретный вызов, который вызывает переполнение стека. Если это отличается от проблемы, я бы предложил открыть новую проблему на их github, и если вы найдете решение, опубликуйте и ответьте как здесь, так и в их github.