Map/Reduce 类管道的最佳工具。使用生成文件? [关闭]

问题描述 投票:0回答:0

当前管道状态

在我的团队中,我们正在用 Python 进行数据分析,我们遇到的问题之一是如何编写/执行管道。目前,每个人都以不同的方式编写他们的管道,有不同的缺点:

  1. 他们用一个大的 python 脚本编写了整个管道。缺点:如果他们想在某个中间步骤更改参数,则整个管道将重新计算,与简单地从该中间步骤重新启动相比,这可能需要额外几个小时

  2. 他们为管道的每个部分编写不同的 Python 脚本,并手动启动他们想要执行的部分。缺点:启动脚本的人为错误,很难重建完整的管道(最好是在自述文件中)并且更新一个脚本或重命名中间文件需要更改其他地方的代码,...整体维护很重

  3. 他们使用某种缓存机制(如 joblib 内存)将整个管道编写在一个大型 python 脚本中。这可能是三个中目前最好的解决方案,但主要缺点是对中间文件的控制非常差(即它们是二进制文件,因此如果我们希望导出某种人类可读的形式,则需要使用另一个脚本例如 csv,...)。另一个问题是它们依赖于 Python 版本,我们可能需要为管道的不同部分使用不同版本的 Python。

基于 makefile 的解决方案

我想到的另一种解决方案是简单地使用 Makefile 来指定管道。好处:

  1. 每个步骤都是一个简单的命令行,它允许我们使用我们想要的任何脚本/python 版本。
  2. 只有在需要时才重新计算依赖关系,比使用 joblib 内存有更多的控制权。
  3. 中间文件及其存储方式完全受控。
  4. 完整的管道在一个文件中指定,允许将该项目更简单地转移给另一个人
  5. 运行不同的目标很容易,不需要修改代码
  6. 管道方面与“算法”方面分开(即 Python 代码不处理管道方面)
  7. 奖励:我们可以并行化

主要缺点:这需要我的团队学习一种新语言(makefile),并且规则中的 % 符号而不是正则表达式形式是有限的。此外,我觉得 Makefile 生态系统不适合这项任务(但我可能是错的)。然而,目前这仍然是最好的解决方案,尤其是当我们从某种 Python 脚本生成 Makefile 时。

问题

我觉得这个问题很标准,应该已经有很好的工具了,但我还没有找到一个非常适合这个任务的工具。您知道我们可以使用的任何众所周知的、有据可查的工具/库/……吗?以下是必要/可能的功能:

  1. 任务的依赖图是一个静态已知的DAG(当然动态也可以)

  2. 运行时,只重新计算需要的任务

  3. 可以针对每个计算任务在不同版本的Python(conda环境)中使用Python脚本。

  4. [奖励] 显示依赖图的 GUI + 显示哪些任务已经完成

  5. [奖励]任务的并行化

感谢您的帮助!

python makefile mapreduce pipeline
© www.soinside.com 2019 - 2024. All rights reserved.