J'essaie d'utiliser spark_apply
pour exécuter la fonction R ci-dessous sur une table Spark. Cela fonctionne bien si ma table d'entrée est faible (par exemple 5000 lignes), mais après ~ 30 minutes renvoie une erreur lorsque la table est modérément importante (par exemple 5.000.000 lignes): sparklyr worker rscript failure, check worker logs for details
La fonction spark_apply de Sparklyr semble fonctionner sur un seul exécuteur et échoue sur un ensemble de données modérément grand
En regardant l'interface utilisateur Spark montre qu'il ya seulement une seule tâche est créée et un seul exécuteur est appliqué à cette tâche.
Quelqu'un peut-il donner des conseils sur les raisons pour lesquelles cette fonction échoue pour un ensemble de données de 5 millions de lignes? Le problème pourrait-il être qu'un exécuteur unique est fait pour faire tout le travail, et échouer?
# 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
Merci pour cette réponse complète! L'augmentation du nombre de partitions a résolu le problème, mais il y a aussi beaucoup d'informations supplémentaires qui me permettront d'aller de l'avant. – jay