【问题标题】:What is the state of the art way to handle what makefiles do for python data analysis?处理makefile对python数据分析所做的最先进的方法是什么?
【发布时间】:2020-03-04 14:53:40
【问题描述】:

我有一个 DAG 程序,它处理和清理某些文件,将它们组合起来,然后进行额外的计算。我想要一种方法来运行整个分析管道,并在有任何变化时重新运行,但不必重新处理每个组件。

我阅读了有关 Makefile 的信息,并认为这听起来像是完美的解决方案。我也知道它可能已经过时并且可能存在更好的替代方案,但据我所知,我通常只会发现大量不太适合此目的的工作流调度程序工具(例如,Airflow、Luigi、 Nextflow、Dagobah等)

似乎其中许多对于我并不真正需要的调度程序、GUI 等来说都是多余的。我只想要一个执行以下操作的文件:

  • 让所有需要运行的 python 脚本一目了然
  • 显示文件依赖关系,以便完全重新运行只会重做上游已更改的部分
  • 有可能进行一些并行化(不是很有必要)
  • 没有太多样板文件

Makefile 示例:

.PHONY : dats
dats : isles.dat abyss.dat

isles.dat : books/isles.txt
    python countwords.py books/isles.txt isles.dat

abyss.dat : books/abyss.txt
    python countwords.py books/abyss.txt abyss.dat

.PHONY : clean
clean :
    rm -f *.dat

这是在 python 中运行这样的最佳程序还是有更好的方法?

【问题讨论】:

    标签: python python-3.x makefile scheduled-tasks


    【解决方案1】:

    DVC(数据版本控制)包括对make 的现代重新实现和扩展,特别适用于数据科学管道(请参阅here)。

    在许多情况下,在 DVC 中处理管道比 make 具有重要优势,例如依赖文件校验和而不是修改时间。相反,make在某种意义上更简单,并且拥有强大的宏机制。尽管如此,makefile 的语法中仍有一些非常微妙的元素(例如,多个输出、中间文件),并且make 通常不支持文件名中的空格。

    【讨论】:

      【解决方案2】:

      你提出问题的方式,我想说snakemake 是要走的路。话虽如此,GNU make 可能已经过时,但不会很快消失,而且它已经过测试并被尝试死去。

      我不会说 make,但我认为您在 snakemake 中的示例 Makefile 会是这样的:

      rule all:
          input:
              ['isles.dat', 'abyss.dat'],
      
      rule make_isles:
          input:
              'books/isles.txt',
          output:
              'isles.dat',
          shell:
              r"""
              python countwords.py {input} {output}
              """
      
      rule make_abyss:
          input:
              'books/abyss.txt',
          output:
              'abyss.dat',
          shell:
              r"""
              python countwords.py {input} {output}
              """
      

      将其保存在名为 Snakefile 的文件中并执行为:

      snakemake # vanilla execution   
      
      snakemake -p -n # Print shell commands (-p). Dry-run mode (-n)
      
      snakemake --delete-all-output # Same-ish as .PHONY clean
      

      snakemake 在生物信息学中很受欢迎,但它的用途非常广泛。

      【讨论】:

        【解决方案3】:

        这是在 python 中运行这样的最佳程序还是有更好的方法?

        “最佳”肯定在旁观者的眼中。但是,如果问题中提出的基于make 的方法能够令人满意地代表问题,那么它是一个 的方法。 make 实现非常广泛,它们的行为很容易理解,并且通常非常适合解决所提出的问题。

        还有其他构建工具可以与make 竞争,其中一些是用 Python 编写的,毫无疑问还有一些更深奥的软件框架可以应用于这项任务。不过,如果您想专注于完成工作而不是构建框架来完成工作,那么我认为没有任何理由超越您已经拥有的基于 make 的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多