我创建了一个如下所示的 spark 应用程序。
使用本地客户端模式运行时,一切正常。
但是当我在 prod 环境中以集群部署模式提交到 YARN 时,applicationAction最后一个匹配块中的变量总是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)
}
}
}