使用Luigi來搭建Data Pipeline

比特踏星鹤
• 阅读 5334

为什么需要Luigi?

常见的资料处理流程可租略分成以下几步:

  1. 预处理: 整合不同来源的数据, 筛选相关的数据, 清洗数据, 标准化(normalization) 等处理
  2. 模型训练: 透过一些机器学习算法来建立模型
  3. 呈现或预测: 将训练得到的模型用于分析模式或是预测

刚开始你的资料处理流程可能是像这样依序地执行脚本

$ python get_data.py
$ python clean_data.py
$ python normalize.py
$ python train.py
$ python predict.py

稍微懒一点的人于是会把所有脚本打包进一个脚本run_all.py

if __name__ == '__main__':
    get_data()
    clean_data()
    normalize()
    train()
    predict()
$ python run_all.py

但是如果想要做好错误处理(error handling), 脚本可能就会变成像这样唠叨的代码

try:
    get_data()
    try:
        clean_data()
        try:
            # ...
        except MoreErrors:
            # ...
    except CleanDataError as e:
        # handle CleanDataError
except GetDataError as e:
    # handle GetDataError

一旦步骤切分得更细或是步骤越来越多时, 错误处理变成一项繁琐的工作, 这样的重複的结构也使得代码不易阅读. 一些框架如Luigi和Airflow能将程序员从这项劳动中解放出来, 提升开发的效率,

什么是Luigi?

Luigi是一套管理上述工作流程的python框架,让开发人员专注在数据处理的逻辑,而不必重複的撰写常用的代码, 例如前面举例的错误处理. 另外, 如果某个数据处理的步骤发生了错误或是更动,使用Luigi可以避免重新计算不被影响的结果.

安装Luigi
  1. 稳定版本 $ pip install luigi
  2. 最新版本 $ pip install git+https://github.com/spotify/luigi.git
运行Luigi
  1. 执行 Luigi daemon $ luigid
  2. 开启浏览器前往 http://localhost:8082
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
深度学习技术开发与应用
关键点1.强化学习的发展历程2.马尔可夫决策过程3.动态规划4.无模型预测学习5.无模型控制学习6.价值函数逼近7.策略梯度方法8.深度强化学习DQN算法系列9.深度策略梯度DDPG,PPO等第一天9:0012:0014:0017:00一、强化学习概述1.强化学习介绍2.强化学习与其它机器学习的不同3.强化学习发展历史4.强化学习典
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
直播预告丨大模型+Agents疏通京东金融运营堵点
大模型时代,“应用变了”:把大模型装进金融营销分几步?11月24日(周五)14:0015:00开播!数字化打破信息孤岛,也建立更多孤岛运营人员被困在自己的环节里十余个子系统、子模块如何整合?自然语言任务中的“幻觉”如何克服?如何将AI训练成业务运营高手?京
比特踏星鹤
比特踏星鹤
Lv1
如果未曾深入过对方的生活,就别妄想真的了解对方. 经典个性签名大全。
文章
3
粉丝
0
获赞
0