Я пытаюсь использовать spark_apply
для запуска функции R ниже в таблице Spark. Это отлично работает, если моя входная таблица небольшая (например, 5000 строк), но через ~ 30 минут выдает ошибку, когда таблица умеренно большая (например, 5 000 000 строк): sparklyr worker rscript failure, check worker logs for details
Глядя на пользовательский интерфейс Spark, видно, что всегда создается только одна задача, и к этой задаче применяется один исполнитель.
Кто-нибудь может дать совет, почему эта функция не работает для набора данных из 5 миллионов строк? Может ли проблема заключаться в том, что один исполнитель выполняет всю работу и не работает?
# Create data and copy to Spark
testdf <- data.frame(string_id=rep(letters[1:5], times=1000), # 5000 row table
string_categories=rep(c("", "1", "2 3", "4 5 6", "7"), times=1000))
testtbl <- sdf_copy_to(sc, testdf, overwrite=TRUE, repartition=100L, memory=TRUE)
# Write function to return dataframe with strings split out
myFunction <- function(inputdf){
inputdf$string_categories <- as.character(inputdf$string_categories)
inputdf$string_categories=with(inputdf, ifelse(string_categories=="", "blank", string_categories))
stringCategoriesList <- strsplit(inputdf$string_categories, ' ')
outDF <- data.frame(string_id=rep(inputdf$string_id, times=unlist(lapply(stringCategoriesList, length))),
string_categories=unlist(stringCategoriesList))
return(outDF)
}
# Use spark_apply to run function in Spark
outtbl <- testtbl %>%
spark_apply(myFunction,
names=c('string_id', 'string_categories'))
outtbl