我创建如下的spark应用程序。
以本地客户端模式运行时,一切正常。
但是当我在产品环境中以群集部署模式提交到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)
}
}
}
答案 0 :(得分:1)
广播变量的目的是为了与执行者共享一些数据。 我认为在您的用例中有两种可能性: