Gem 写了一个玩具 make 工具,用来简化数据分析的工作流程

zephyr · 2019年04月08日 · 5547 次阅读

项目地址:https://github.com/minor6th/dake RubyGems:https://rubygems.org/gems/dake

平时工作主要是一些数据分析相关的一人项目,会用到 hadoop/spark 这类集群处理大量数据。 但因为是一个人做分析,也没有什么工程化的项目管理,用到的多是零散的各种语言(Python、Ruby、R、Scala、Hive...)写的脚本。 特别是数据预处理和各种调参实验,往往需要各种工具配合使用,结果数据繁多,时间一长容易混乱,整个流程难以复现。

一次从某本书上看到一个工具(https://github.com/Factual/drake),觉得可能正好合适我这种情况,就想试用一下, 结果发现这个工具居然是 Clojure 写的,启动速度慢不说,还有很多地方用起来比较别扭,想着干脆用 Ruby 再造一个轮子吧,也方便扩展功能,就有了这个玩具 make 工具。

语法上基本照搬了 Drake 的语法(https://docs.google.com/document/d/1bF-OKNLIG10v_lMes_m4yyaJtAaJKtdK0Jizvi_MNsg/edit) 只是做了一点点修改(注释用了常见的‘#’,Tag 用了‘@’)。Drake 的功能很多,目前 Dake 只实现了其中一小部分,包括:

Dakefile(规则脚本)支持:

  1. 变量定义(Dakefile 里面可以定义变量,在运行时通过命令行赋值)
  2. 条件判断(可以通过变量的值,定义不同的 Step)
  3. 支持 Ruby、Python、R、Shell、AWK,五种 Step 类型(Step 中可以直接写脚本代码,避免过多零散文件)
  4. 模板 Step(通过正则表达式匹配,自动生成依赖需要的 Step)
  5. 方法 Step(可以定义一个通用的 Step,作为方法嵌入到其他 Step 中)
  6. 嵌套(在一个 Dakefile 中可以 include 其他 Dakefile)

运行时支持:

  1. 依赖解析(自动通过文件时间戳,决定需要执行的 Step)
  2. 并发执行(通过线程池支持多个不互相依赖的 Step 并发执行)
  3. 强制执行(通过命令行指定需要无视时间戳强制执行的 Step)

目前 Readme 还没写好,只提交了一个 example,打算一边在日常小项目中吃狗粮,一边把 Bug 修修,把 Readme 完善一下。

有需求的同学可以下载来玩玩,第一次写这种工具,也希望有大佬能看到,给些建议~

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号