【发布时间】:2018-03-05 22:09:21
【问题描述】:
我正在尝试使用spark_apply 在 Spark 表上运行下面的 R 函数。如果我的输入表很小(例如 5,000 行),这可以正常工作,但是当表中等大(例如 5,000,000 行)时,大约 30 分钟后会引发错误:
sparklyr worker rscript failure, check worker logs for details
查看 Spark 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
【问题讨论】:
标签: r apache-spark sparklyr