Apache spark 无法获取广播值

Apache spark 无法获取广播值,apache-spark,Apache Spark,我创建了一个spark应用程序,如下所示 在本地客户端模式下运行时,一切正常。 但当我在prod环境中以集群部署模式提交到Thread时,最后一个匹配块中的变量applicationAction总是为null 我在这里使用的广播有什么问题吗,或者有任何其他方法可以将变量传递给最后一个匹配案例块 谢谢 对象火花任务{ 私有密封特征动作{} 案例类Action1扩展了AppAction 案例类Action2扩展了AppAction def mainargs:数组[字符串]:单位={ var应用程序操

我创建了一个spark应用程序,如下所示

在本地客户端模式下运行时,一切正常。 但当我在prod环境中以集群部署模式提交到Thread时,最后一个匹配块中的变量applicationAction总是为null

我在这里使用的广播有什么问题吗,或者有任何其他方法可以将变量传递给最后一个匹配案例块

谢谢

对象火花任务{ 私有密封特征动作{} 案例类Action1扩展了AppAction 案例类Action2扩展了AppAction def mainargs:数组[字符串]:单位={ var应用程序操作:广播[AppAction]=null val sparkSession=sparkSession.builder.appNameSparkTask.getOrCreate args0匹配{ 案例操作-1=>applicationAction=sparkSession.sparkContext.broadcastAction1 案例操作-2=>applicationAction=sparkSession.sparkContext.broadcastAction2 案例=sys.exit255 } //下面是一些df操作并获取持久化数据集 val df1=。。。 val df2=。。。 val df3=。。。 applicationAction.value匹配{ 案例操作1=>handleAction1df3 案例操作2=>handleAction2df3 } } }
广播变量的目的是与执行者共享一些数据。 我认为在您的用例中有两种可能:

您试图从执行者到驱动者获取一些信息:为此,您不应该使用广播变量,而应该使用累加器或类似take/collect的东西。 您希望根据applicationAction.value immutable做出决定:在这种情况下,您可以直接使用args0的值。
非常感谢你的回答。我使用广播的原因是,如果我使用applicationAction而不广播它,我会得到null。因此,理论上可以直接在主函数中使用从args0分配的变量吗?@Francis.TM然后您可以直接使用args0在驱动程序中执行某些操作主函数,但DF或RDDI上的某些操作没有发现我的错误,它没有关于火花或广播的问题。谢谢