我有一个spark应用程序,它基本上接收一个大数据集,对它执行一些计算,最后执行一些io将它存储在数据库中。所有这些阶段都发生在执行器上,驱动程序从每个任务中获取(收集)一个布尔值,表示该任务的成功/失败状态(例如,某些项的计算或io可能失败)。
e、 例如,下面是一个过于简化的沿袭(在实际实现中,有多个重新划分和计算步骤):
readSomeDataset()
.repartition()
.mapPartition { // do some calculation }
.mapPartition { // do some IO }
.collect()
问题:根据计算结果,我想在驱动程序上做些别的事情(比如发布一条消息说“计算成功了”)。这需要对整个数据集执行一次,而不是对单个分区,因此需要在驱动程序上执行。
但是,executors上的io需要很长时间,我不想等到它完成后再发布。
在处理任务的过程中,执行者是否有办法将“消息”发送回驱动程序?
(不过,我想到了蓄能器之类的东西,因为只有在执行器的最终操作完成后,蓄能器才能使用)
1条答案
按热度按时间jjhzyzn01#
spark是一个懒惰的框架,需要一个完整的作业(从读到写)来执行,它不能只执行一部分。
要在不重新处理的情况下进行这些更改,可以缓存Dataframe,以尽可能快的速度恢复,类似这样的操作。