为了提出我的问题,让我给出一些背景信息:我目前正在研究一个有许多不同步骤的数据管道。每一步都可能出错,很多都需要一些时间(不是很大,但是大约几分钟)。
由于这个原因,管道目前受到人类的严格监督。分析师完成每个步骤,在Jupyter笔记本中运行python代码,遇到问题时会对内联进行小的代码调整并重复该部分。
从长远来看,这里的目标是零人为干预。但是,从短期来看,我们希望这个过程更加无缝。最简单的方法似乎是将每个部分拆分成自己的脚本,并拥有一个运行每个位并验证输出的父脚本。但是,如果文件失败,我们还需要能够使用相同的设置重新运行该文件。
例如:
run a --> ✅
run b --> ✅ (b relies on some data produced by a)
run c --> ❌ (c relies on data produced by a and b)
// make some changes to c
run c --> ✅ (c should run in an identical state to its original run)
最明显的方法是将每个脚本的输出写入文件,并将所有这些脚本加载到下一个脚本中。这可行,但似乎有点不雅。数据库似乎是另一个有效的选项,但很多数据并不适合数据库格式。
有没有人对某些方法有任何建议,以实现我所寻找的目标?如果有什么不清楚,我也非常乐意澄清任何要点!
答案 0 :(得分:7)
您可以创建一个对象,该对象基本上在每个步骤后维护状态,并使用pickle将该对象序列化为文件。
然后由你的python脚本来解开该文件,然后根据状态确定需要从哪个步骤开始。
答案 1 :(得分:1)
队列和管道彼此之间的工作非常好(从架构上讲)。其中一个更好的事实是,较慢的阶段可以比更快的阶段获得更多的工作人员,从而允许根据工作负载优化管道。