我試圖使用spark_apply
在Spark表上運行下面的R函數。這工作得很好,如果我的輸入表小(例如5000行),但約30分鐘拋出一個錯誤後,當該表是中等大小(例如500萬行): sparklyr worker rscript failure, check worker logs for details
Sparklyr的spark_apply函數似乎在單個執行程序上運行,並在中等大小的數據集上失敗
望着星火UI顯示有隻有一個任務正在創建,並且一個執行者被應用於這個任務。
任何人都可以提供建議,爲什麼這個函數失敗的500萬行數據集?難道問題是單個遺囑執行者是否正在做所有的工作,並失敗?
# 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
感謝您對這樣一個全面的答案!增加分區的數量解決了問題,但也有很多額外的信息可以幫助我繼續前進。 – jay