Я создаю искровое приложение, как показано ниже.
При запуске в режиме локального клиента все идет хорошо.
Но когда я отправляю в YARN с режимом развертывания кластера в среде prod, переменная applicationAction
inпоследний совпадающий блок всегда будет null
.
Так есть ли какие-либо проблемы, которые я использую здесь, или есть какой-либо другой метод, которым я мог бы передать переменные в последний блок совпадений.
Спасибо.
object SparkTask {
private sealed trait AppAction {}
case class Action1() extends AppAction
case class Action2() extends AppAction
def main(args: Array[String]): Unit = {
var applicationAction: Broadcast[AppAction] = null
val sparkSession = SparkSession.builder.appName("SparkTask").getOrCreate
args(0) match {
case "action-1" => applicationAction = sparkSession.sparkContext.broadcast(Action1())
case "action-2" => applicationAction = sparkSession.sparkContext.broadcast(Action2())
case _ => sys.exit(255)
}
// Here goes some df action and get a persisted dataset
val df1 = ...
val df2 = ...
val df3 = ...
applicationAction.value match {
case Action1() => handleAction1(df3)
case Action2() => handleAction2(df3)
}
}
}