失败的数据块作业如何在它离开的地方继续?

How a failed databricks job can continue where it left?

我有一个 databricks 作业,其中 运行 许多命令,最后它尝试将结果保存到一个文件夹中。但是,它失败了,因为它试图将文件写入文件夹但文件夹不存在。 我只是创建了文件夹。 但是,如何让它在不执行所有先前命令的情况下继续它离开的地方。

如果作业完成,则所有处理的数据都将消失,直到您编写一些中间状态(附加表等),您可以从中继续处理。在大多数情况下,Spark 实际上仅在写入所提供转换的执行结果时才执行代码。

所以现在您只需要重新运行该作业。

我假设 Databricks 作业 你指的是 the way to run non-interactive code in a Databricks cluster

我不认为你问的是可能的,即从 Databricks 上的先前作业 运行 获取某个 Spark 任务的输出。正如另一个答案中指出的那样,“如果作业完成,则所有处理的数据都将消失”。这与 Spark 在底层的工作方式有关。如果您对这个话题感到好奇,我建议您开始阅读这篇关于 Transformations and Actions in Spark.

的 post

尽管您可以想到一些解决方法,例如,如果您对工作的某些中间输出感到好奇,您可以决定将 DataFrame/Dataset 临时写入某个外部位置。通过这种方式,您可以通过读取您的检查点之一作为输入,轻松地从您的首选点恢复工作。这种方法有点笨拙,我不推荐它,但如果您处于 testing/designing 阶段,您可能会想选择这种快速而肮脏的解决方案。

一个更强大的解决方案是将您的作业拆分为多个子作业,并在它们之间设置上游和下游依赖关系。您可以使用 Databricks natively (Task dependencies section) or an external scheduler that integrates with Databricks, like Airflow 来做到这一点。 通过这种方式,您可以拆分您的任务,并且您将能够对您的应用程序进行更高的控制粒度。因此,如果写入步骤再次失败,您将能够轻松地重新 运行 仅写入。