Using https://stackoverflow.com/a/44084038/328968 as a starting point, you can create a listener and add it to the session. When the application ends you can perform a callback to restart the application.
SparkListener is defined in the above ref'd Answer.
class SparkApplicationEndListener(SparkListener):
def __init__(self, applicationEndCallback):
self.applicationEndCallback = applicationEndCallback
def onApplicationEnd(self, applicationEnd):
if self.applicationEndCallback != None:
self.applicationEndCallback(applicationEnd)
########
def handleSparkApplicationEnd(app_end):
print(app_end.toString())
sparkSession = buildSparkSession()
def buildSparkSession():
#......
sparkSession.sparkContext._gateway.start_callback_server()
listener = SparkApplicationEndListener(handleSparkApplicationEnd)
sparkSession.sparkContext._jsc.sc().addSparkListener(listener)