Apache spark 获取executor上的Spark会话

Apache spark 获取executor上的Spark会话,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,部署spark structure流媒体应用程序后,如何在executor上获得spark会话以部署具有相同会话和相同配置设置的另一个作业?如果在群集模式下运行spark,则无法将spark会话转到executor,因为spark会话对象无法序列化,因此无法将其发送给executor。此外,这样做也违反了spark设计原则 如果您能告诉我问题陈述,我也许能帮您解决这个问题。这是不可能的。我也有类似的要求,然后我必须创建两个独立的主类和一个spark launcher类,因为我正在基于我想要运行的

部署spark structure流媒体应用程序后,如何在executor上获得spark会话以部署具有相同会话和相同配置设置的另一个作业?

如果在群集模式下运行spark,则无法将spark会话转到executor,因为spark会话对象无法序列化,因此无法将其发送给executor。此外,这样做也违反了spark设计原则


如果您能告诉我问题陈述,我也许能帮您解决这个问题。

这是不可能的。我也有类似的要求,然后我必须创建两个独立的主类和一个spark launcher类,因为我正在基于我想要运行的类来执行sparksession.conf.set(主类名)。如果我想同时运行这两个函数,那么我首先使用thread.sleep()来完成,然后再启动另一个函数。我还使用了sparkListener代码来获取状态,无论它是否已完成。

从技术上讲,您可以在executor上获得spark会话,无论您使用哪种模式运行它,但这并不真正值得。spark会话是各种内部spark设置以及我们在启动时提供的其他用户定义设置的对象

这些配置设置在executor中不可用的唯一原因是,它们中的大多数被标记为瞬态,这意味着这些对象将被发送为null,因为将它们发送给executor在逻辑上没有意义,同样,将数据库连接对象从一个节点发送到另一个节点也没有意义

其中一个麻烦的方法是从驱动程序中的spark会话获取所有配置设置,在一些标记为可序列化的自定义对象中进行设置,然后将其发送给执行器。此外,您的executor环境在所有spark jar/目录和其他spark属性(如spark\u HOME等)方面应与driver相同,如果您每次运行并意识到您丢失了某些内容,这些属性可能会很繁忙。它将是一个不同的spark会话对象,但具有所有相同的设置


更好的选择是使用您为其他应用程序提供的相同设置运行另一个spark应用程序,因为一个spark会话与一个spark应用程序关联。

如果我想在
数据帧中重用SparkSession(从纱线上开始)。foreachPartition
函数怎么办