<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>zephyr</title>
    <link>https://ruby-china.org/zephyr</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>写了一个玩具 make 工具，用来简化数据分析的工作流程</title>
      <description>&lt;p&gt;项目地址：&lt;a href="https://github.com/minor6th/dake" rel="nofollow" target="_blank"&gt;https://github.com/minor6th/dake&lt;/a&gt;
RubyGems：&lt;a href="https://rubygems.org/gems/dake" rel="nofollow" target="_blank"&gt;https://rubygems.org/gems/dake&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;语法上基本照搬了 Drake 的语法（&lt;a href="https://docs.google.com/document/d/1bF-OKNLIG10v_lMes_m4yyaJtAaJKtdK0Jizvi_MNsg/edit" rel="nofollow" target="_blank"&gt;https://docs.google.com/document/d/1bF-OKNLIG10v_lMes_m4yyaJtAaJKtdK0Jizvi_MNsg/edit&lt;/a&gt;）
只是做了一点点修改（注释用了常见的‘#’，Tag 用了‘@’）。Drake 的功能很多，目前 Dake 只实现了其中一小部分，包括：&lt;/p&gt;

&lt;p&gt;Dakefile（规则脚本）支持：&lt;/p&gt;

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

&lt;p&gt;运行时支持：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;依赖解析（自动通过文件时间戳，决定需要执行的 Step）&lt;/li&gt;
&lt;li&gt;并发执行（通过线程池支持多个不互相依赖的 Step 并发执行）&lt;/li&gt;
&lt;li&gt;强制执行（通过命令行指定需要无视时间戳强制执行的 Step）&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;有需求的同学可以下载来玩玩，第一次写这种工具，也希望有大佬能看到，给些建议～&lt;/p&gt;</description>
      <author>zephyr</author>
      <pubDate>Mon, 08 Apr 2019 13:21:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/38357</link>
      <guid>https://ruby-china.org/topics/38357</guid>
    </item>
  </channel>
</rss>
