I.はじめに
SparkがRDDを使用してFilter関数を呼び出すと、ドライバー側がスタックし、エラーReturnStatementInClosureExceptionを報告します。Sparkクロージャーではreturnステートメントは許可されていません。つまり、クロージャーではreturn関数を使用できません。
2.使用シナリオ
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
}
})