一.引言
Spark 使用 RDD 调用 Filter 函数时,dirver 端卡住,报错 ReturnStatementInClosureException: Return statements aren't allowed in Spark closures,即闭包内无法使用 return 函数:
二.使用场景
使用 rdd.filter 方法过滤 id 时使用了 return 方法,导致上述报错:
rdd.filter(arr => {
val id = arr(0)
val l = id.length()
if (l <= 8) return false
if (id.startsWith("1")) {
true
} else {
false
}
})
修改方案:
闭包函数内不使用 return 关键字即可
rdd.filter(arr => {
val id = arr(0)
val l = id.length()
if (l <= 8) {
false
} else if (id.startsWith("1")) {
true
} else {
false
}
})